diff --git a/src/main/java/emu/grasscutter/game/entity/EntityGadget.java b/src/main/java/emu/grasscutter/game/entity/EntityGadget.java index 6b4c677b2..db7e4b80e 100644 --- a/src/main/java/emu/grasscutter/game/entity/EntityGadget.java +++ b/src/main/java/emu/grasscutter/game/entity/EntityGadget.java @@ -3,6 +3,7 @@ package emu.grasscutter.game.entity; import emu.grasscutter.Grasscutter; import emu.grasscutter.data.GameData; import emu.grasscutter.data.def.GadgetData; +import emu.grasscutter.game.entity.gadget.GadgetChest; import emu.grasscutter.game.entity.gadget.GadgetContent; import emu.grasscutter.game.entity.gadget.GadgetGatherPoint; import emu.grasscutter.game.entity.gadget.GadgetRewardStatue; @@ -27,6 +28,7 @@ import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; import emu.grasscutter.net.proto.VectorOuterClass.Vector; import emu.grasscutter.net.proto.WorktopInfoOuterClass.WorktopInfo; +import emu.grasscutter.server.packet.send.PacketGadgetStateNotify; import emu.grasscutter.utils.Position; import emu.grasscutter.utils.ProtoHelper; import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap; @@ -91,6 +93,11 @@ public class EntityGadget extends EntityBaseGadget { public void setState(int state) { this.state = state; } + + public void updateState(int state){ + this.setState(state); + this.getScene().broadcastPacket(new PacketGadgetStateNotify(this, state)); + } public int getPointType() { return pointType; @@ -120,6 +127,7 @@ public class EntityGadget extends EntityBaseGadget { case GatherPoint -> new GadgetGatherPoint(this); case Worktop -> new GadgetWorktop(this); case RewardStatue -> new GadgetRewardStatue(this); + case Chest -> new GadgetChest(this); default -> null; }; @@ -176,30 +184,4 @@ public class EntityGadget extends EntityBaseGadget { return entityInfo.build(); } - - public void openChest(Player player) { - var chestRewardMap = getScene().getWorld().getServer().getWorldDataManager().getChestRewardMap(); - var chestReward = chestRewardMap.get(this.getGadgetData().getJsonName()); - if(chestReward == null){ - Grasscutter.getLogger().warn("Could not found the config of this type of Chests {}", this.getGadgetData().getJsonName()); - return; - } - - player.earnExp(chestReward.getAdvExp()); - player.getInventory().addItem(201, chestReward.getResin()); - - var mora = chestReward.getMora() * (1 + (player.getWorldLevel() - 1) * 0.5); - player.getInventory().addItem(202, (int)mora); - - for(int i=0;i garbageGadgets = group.getGarbageGadgets(); if (garbageGadgets != null) { - garbageGadgets.forEach(g -> scriptManager.createGadgets(group.id, group.block_id, g)); + garbageGadgets.forEach(g -> scriptManager.createGadget(group.id, group.block_id, g)); } // Load suites @@ -706,9 +706,4 @@ public class Scene { addEntity(entity); } } - - public void updateGadgetState(EntityGadget gadget, int state){ - gadget.setState(state); - broadcastPacket(new PacketGadgetStateNotify(gadget, state)); - } } diff --git a/src/main/java/emu/grasscutter/scripts/ScriptLib.java b/src/main/java/emu/grasscutter/scripts/ScriptLib.java index 74aa8b6b6..7b2aefdc7 100644 --- a/src/main/java/emu/grasscutter/scripts/ScriptLib.java +++ b/src/main/java/emu/grasscutter/scripts/ScriptLib.java @@ -437,8 +437,8 @@ public class ScriptLib { return 1; } - if(entity instanceof EntityGadget entityGadget){ - getSceneScriptManager().getScene().updateGadgetState(entityGadget, state); + if (entity instanceof EntityGadget entityGadget) { + entityGadget.updateState(state); } return 0;