From 39d759595d79c70003e0e4b0cf0a390accecd1de Mon Sep 17 00:00:00 2001 From: P0nk Date: Thu, 30 Mar 2023 06:40:16 +0200 Subject: [PATCH] Get shop as Optional --- .../client/command/commands/gm2/GmShopCommand.java | 2 +- .../net/server/channel/handlers/NPCTalkHandler.java | 9 ++------- .../server/channel/handlers/UseCashItemHandler.java | 7 ++++--- src/main/java/server/ShopFactory.java | 11 ++++++----- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/main/java/client/command/commands/gm2/GmShopCommand.java b/src/main/java/client/command/commands/gm2/GmShopCommand.java index bf25f7d213..7450440053 100644 --- a/src/main/java/client/command/commands/gm2/GmShopCommand.java +++ b/src/main/java/client/command/commands/gm2/GmShopCommand.java @@ -36,6 +36,6 @@ public class GmShopCommand extends Command { @Override public void execute(Client c, String[] params, CommandContext ctx) { - ctx.shopFactory().getShop(GM_SHOP_ID).sendShop(c); + ctx.shopFactory().getShop(GM_SHOP_ID).ifPresent(shop -> shop.sendShop(c)); } } diff --git a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java index d66e8144b2..c74bda40cd 100644 --- a/src/main/java/net/server/channel/handlers/NPCTalkHandler.java +++ b/src/main/java/net/server/channel/handlers/NPCTalkHandler.java @@ -30,7 +30,6 @@ import net.packet.InPacket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scripting.npc.NPCScriptManager; -import server.Shop; import server.ShopFactory; import server.life.NPC; import server.life.PlayerNPC; @@ -106,14 +105,10 @@ public final class NPCTalkHandler extends AbstractPacketHandler { } private boolean hasShop(NPC npc) { - return shopFactory.getShop(npc.getId()) != null; + return shopFactory.getShop(npc.getId()).isPresent(); } private void sendShop(NPC npc, Client c) { - Shop shop = shopFactory.getShop(npc.getId()); - if (shop == null) { - return; - } - shop.sendShop(c); + shopFactory.getShop(npc.getId()).ifPresent(shop -> shop.sendShop(c)); } } diff --git a/src/main/java/net/server/channel/handlers/UseCashItemHandler.java b/src/main/java/net/server/channel/handlers/UseCashItemHandler.java index 3470d30077..6d5e852190 100644 --- a/src/main/java/net/server/channel/handlers/UseCashItemHandler.java +++ b/src/main/java/net/server/channel/handlers/UseCashItemHandler.java @@ -54,6 +54,7 @@ import tools.Pair; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import static java.util.concurrent.TimeUnit.DAYS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -511,9 +512,9 @@ public final class UseCashItemHandler extends AbstractPacketHandler { } } else if (itemType == 545) { // MiuMiu's travel store if (player.getShop() == null) { - Shop shop = shopFactory.getShop(MIU_MIU_SHOP_ID); - if (shop != null) { - shop.sendShop(c); + Optional shop = shopFactory.getShop(MIU_MIU_SHOP_ID); + if (shop.isPresent()) { + shop.get().sendShop(c); remove(c, position, itemId); } } else { diff --git a/src/main/java/server/ShopFactory.java b/src/main/java/server/ShopFactory.java index 7e932368fc..985502ecb6 100644 --- a/src/main/java/server/ShopFactory.java +++ b/src/main/java/server/ShopFactory.java @@ -37,11 +37,12 @@ import java.util.stream.Stream; /** * @author Matze + * @author Ponk */ public class ShopFactory { private static final short MAX_QUANTITY_PER_PURCHASE = 1000; // Should really use max stack size for the given item private static final Set rechargeableItemIds = rechargeableItemIds(); - private final Cache shops = Caffeine.newBuilder().build(); + private final Cache> shops = Caffeine.newBuilder().build(); private final ShopDao shopDao; public ShopFactory(ShopDao shopDao) { @@ -56,17 +57,17 @@ public class ShopFactory { .collect(Collectors.toUnmodifiableSet()); } - public Shop getShop(int shopId) { + public Optional getShop(int shopId) { return shops.get(shopId, this::loadShop); } - private Shop loadShop(int shopId) { + private Optional loadShop(int shopId) { Optional dbShop = shopDao.getShop(shopId); if (dbShop.isEmpty()) { - throw new IllegalArgumentException("Shop with id %d does not exist".formatted(shopId)); + return Optional.empty(); } List items = shopDao.getShopItems(shopId); - return new Shop(dbShop.get().id(), dbShop.get().npcId(), fromDbShopItems(items)); + return Optional.of(new Shop(dbShop.get().id(), dbShop.get().npcId(), fromDbShopItems(items))); } private List fromDbShopItems(List dbItems) {