diff --git a/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherObject.java b/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherObject.java index 2174112b2..2dfe220d3 100644 --- a/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherObject.java +++ b/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherObject.java @@ -13,7 +13,6 @@ import emu.grasscutter.net.proto.InteractTypeOuterClass.InteractType; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; import emu.grasscutter.server.packet.send.PacketGadgetInteractRsp; -import emu.grasscutter.utils.Position; import emu.grasscutter.utils.Utils; public class GadgetGatherObject extends GadgetContent { @@ -69,11 +68,10 @@ public class GadgetGatherObject extends GadgetContent { scene, player, GameData.getItemDataMap().get(itemId), - new Position( - getGadget().getPosition().getX() + (float)Utils.randomRange(1,5) / 5, - getGadget().getPosition().getY() + 2f, - getGadget().getPosition().getZ() + (float)Utils.randomRange(1,5) / 5 - ), + getGadget().getPosition().clone() + .addY(2f) + .addX(Utils.randomFloatRange(-1f, 1f)) + .addZ(Utils.randomFloatRange(-1f, 1f)), 1, true); diff --git a/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherPoint.java b/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherPoint.java index bd1b968c6..aec836f3d 100644 --- a/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherPoint.java +++ b/src/main/java/emu/grasscutter/game/entity/gadget/GadgetGatherPoint.java @@ -11,7 +11,6 @@ import emu.grasscutter.game.world.Scene; import emu.grasscutter.net.proto.GatherGadgetInfoOuterClass.GatherGadgetInfo; import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq; import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo; -import emu.grasscutter.utils.Position; import emu.grasscutter.utils.Utils; public class GadgetGatherPoint extends GadgetContent { @@ -61,14 +60,13 @@ public class GadgetGatherPoint extends GadgetContent { for (int i = 0 ; i < times ; i++) { EntityItem item = new EntityItem( - scene, - player, + scene, + player, GameData.getItemDataMap().get(itemId), - new Position( - getGadget().getPosition().getX() + (float)Utils.randomRange(1,5) / 5, - getGadget().getPosition().getY() + 2f, - getGadget().getPosition().getZ() + (float)Utils.randomRange(1,5) / 5 - ), + getGadget().getPosition().clone() + .addY(2f) + .addX(Utils.randomFloatRange(-1f, 1f)) + .addZ(Utils.randomFloatRange(-1f, 1f)), 1, true); diff --git a/src/main/java/emu/grasscutter/game/managers/mapmark/MapMark.java b/src/main/java/emu/grasscutter/game/managers/mapmark/MapMark.java index 59d4f1b20..1d30692fa 100644 --- a/src/main/java/emu/grasscutter/game/managers/mapmark/MapMark.java +++ b/src/main/java/emu/grasscutter/game/managers/mapmark/MapMark.java @@ -25,11 +25,7 @@ public class MapMark { public MapMark(MapMarkPoint mapMarkPoint) { this.sceneId = mapMarkPoint.getSceneId(); this.name = mapMarkPoint.getName(); - this.position = new Position( - mapMarkPoint.getPos().getX(), - mapMarkPoint.getPos().getY(), - mapMarkPoint.getPos().getZ() - ); + this.position = new Position(mapMarkPoint.getPos()); this.mapMarkPointType = mapMarkPoint.getPointType(); this.monsterId = mapMarkPoint.getMonsterId(); this.mapMarkFromType = mapMarkPoint.getFromType(); diff --git a/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java b/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java index b23ae0c28..17d521bb2 100644 --- a/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java +++ b/src/main/java/emu/grasscutter/game/managers/stamina/StaminaManager.java @@ -497,11 +497,7 @@ public class StaminaManager extends BasePlayerManager { } } previousState = currentState; - previousCoordinates = new Position( - currentCoordinates.getX(), - currentCoordinates.getY(), - currentCoordinates.getZ() - ); + previousCoordinates = currentCoordinates.clone(); } } diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerPersonalSceneJumpReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerPersonalSceneJumpReq.java index 246dcbaa5..7396295c6 100644 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerPersonalSceneJumpReq.java +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerPersonalSceneJumpReq.java @@ -17,19 +17,17 @@ public class HandlerPersonalSceneJumpReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { PersonalSceneJumpReq req = PersonalSceneJumpReq.parseFrom(payload); + var player = session.getPlayer(); // get the scene point - String code = session.getPlayer().getSceneId() + "_" + req.getPointId(); + String code = player.getSceneId() + "_" + req.getPointId(); ScenePointEntry scenePointEntry = GameData.getScenePointEntries().get(code); if (scenePointEntry != null) { - float x = scenePointEntry.getPointData().getTranPos().getX(); - float y = scenePointEntry.getPointData().getTranPos().getY(); - float z = scenePointEntry.getPointData().getTranPos().getZ(); - Position pos = new Position(x, y, z); + Position pos = scenePointEntry.getPointData().getTranPos().clone(); // This might not need cloning int sceneId = scenePointEntry.getPointData().getTranSceneId(); - session.getPlayer().getWorld().transferPlayerToScene(session.getPlayer(), sceneId, pos); + player.getWorld().transferPlayerToScene(player, sceneId, pos); session.send(new PacketPersonalSceneJumpRsp(sceneId, pos)); } diff --git a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneTransToPointReq.java b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneTransToPointReq.java index aa86d5433..f8e8be3e5 100644 --- a/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneTransToPointReq.java +++ b/src/main/java/emu/grasscutter/server/packet/recv/HandlerSceneTransToPointReq.java @@ -9,7 +9,6 @@ import emu.grasscutter.net.packet.PacketHandler; import emu.grasscutter.server.event.player.PlayerTeleportEvent.TeleportType; import emu.grasscutter.server.game.GameSession; import emu.grasscutter.server.packet.send.PacketSceneTransToPointRsp; -import emu.grasscutter.utils.Position; @Opcodes(PacketOpcodes.SceneTransToPointReq) public class HandlerSceneTransToPointReq extends PacketHandler { @@ -17,21 +16,19 @@ public class HandlerSceneTransToPointReq extends PacketHandler { @Override public void handle(GameSession session, byte[] header, byte[] payload) throws Exception { SceneTransToPointReq req = SceneTransToPointReq.parseFrom(payload); + var player = session.getPlayer(); String code = req.getSceneId() + "_" + req.getPointId(); ScenePointEntry scenePointEntry = GameData.getScenePointEntries().get(code); if (scenePointEntry != null) { - float x = scenePointEntry.getPointData().getTranPos().getX(); - float y = scenePointEntry.getPointData().getTranPos().getY(); - float z = scenePointEntry.getPointData().getTranPos().getZ(); - - if (session.getPlayer().getWorld().transferPlayerToScene(session.getPlayer(), req.getSceneId(), TeleportType.WAYPOINT, new Position(x, y, z))) { - session.send(new PacketSceneTransToPointRsp(session.getPlayer(), req.getPointId(), req.getSceneId())); + if (player.getWorld().transferPlayerToScene(player, req.getSceneId(), TeleportType.WAYPOINT, scenePointEntry.getPointData().getTranPos().clone())) { + session.send(new PacketSceneTransToPointRsp(player, req.getPointId(), req.getSceneId())); + return; } - } else { - session.send(new PacketSceneTransToPointRsp()); } + + session.send(new PacketSceneTransToPointRsp()); } } diff --git a/src/main/java/emu/grasscutter/server/packet/send/PacketMarkMapRsp.java b/src/main/java/emu/grasscutter/server/packet/send/PacketMarkMapRsp.java index 1492ee914..0a62eb76e 100644 --- a/src/main/java/emu/grasscutter/server/packet/send/PacketMarkMapRsp.java +++ b/src/main/java/emu/grasscutter/server/packet/send/PacketMarkMapRsp.java @@ -1,7 +1,6 @@ package emu.grasscutter.server.packet.send; import emu.grasscutter.game.managers.mapmark.MapMark; -import emu.grasscutter.game.player.Player; import emu.grasscutter.net.packet.BasePacket; import emu.grasscutter.net.packet.PacketOpcodes; import emu.grasscutter.net.proto.*; @@ -21,13 +20,7 @@ public class PacketMarkMapRsp extends BasePacket { MapMarkPointOuterClass.MapMarkPoint.Builder markPoint = MapMarkPointOuterClass.MapMarkPoint.newBuilder(); markPoint.setSceneId(mapMark.getSceneId()); markPoint.setName(mapMark.getName()); - - VectorOuterClass.Vector.Builder positionVector = VectorOuterClass.Vector.newBuilder(); - positionVector.setX(mapMark.getPosition().getX()); - positionVector.setY(mapMark.getPosition().getY()); - positionVector.setZ(mapMark.getPosition().getZ()); - markPoint.setPos(positionVector.build()); - + markPoint.setPos(mapMark.getPosition().toProto()); markPoint.setPointType(mapMark.getMapMarkPointType()); markPoint.setFromType(mapMark.getMapMarkFromType()); markPoint.setMonsterId(mapMark.getMonsterId());