From 25df958573ebc5e7c400a26a7af38af1e6356544 Mon Sep 17 00:00:00 2001 From: sirjonasxx <36828922+sirjonasxx@users.noreply.github.com> Date: Sun, 23 Apr 2023 01:00:26 +0200 Subject: [PATCH] Compatibility measure & wired move packet --- .../presetconfig/wired/PresetWireds.java | 10 ++++-- src/main/java/game/FloorState.java | 31 +++++++++++++++++-- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/main/java/extension/tools/presetconfig/wired/PresetWireds.java b/src/main/java/extension/tools/presetconfig/wired/PresetWireds.java index c6cdf93..11d6ec7 100644 --- a/src/main/java/extension/tools/presetconfig/wired/PresetWireds.java +++ b/src/main/java/extension/tools/presetconfig/wired/PresetWireds.java @@ -5,6 +5,7 @@ import org.json.JSONArray; import org.json.JSONObject; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -33,8 +34,13 @@ public PresetWireds(JSONObject object) { triggers = object.getJSONArray("triggers").toList().stream() .map(o -> new PresetWiredTrigger(new JSONObject((Map)o))).collect(Collectors.toList()); - addons = object.getJSONArray("addons").toList().stream() - .map(o -> new PresetWiredAddon(new JSONObject((Map)o))).collect(Collectors.toList()); + if (object.has("addons")) { + addons = object.getJSONArray("addons").toList().stream() + .map(o -> new PresetWiredAddon(new JSONObject((Map)o))).collect(Collectors.toList()); + } + else { + addons = new ArrayList<>(); + } } diff --git a/src/main/java/game/FloorState.java b/src/main/java/game/FloorState.java index d5c92ea..bb3978e 100644 --- a/src/main/java/game/FloorState.java +++ b/src/main/java/game/FloorState.java @@ -9,7 +9,6 @@ import gearth.extensions.parsers.HStuff; import gearth.protocol.HMessage; import gearth.protocol.HPacket; -import javafx.beans.InvalidationListener; import utils.Callback; import java.util.*; @@ -44,7 +43,8 @@ public FloorState(IExtension extension, Logger logger, Callback onFloorItemsChan extension.intercept(HMessage.Direction.TOCLIENT, "ObjectAdd", this::onObjectAdd); extension.intercept(HMessage.Direction.TOCLIENT, "ObjectRemove", this::onObjectRemove); extension.intercept(HMessage.Direction.TOCLIENT, "ObjectUpdate", this::onObjectUpdate); - extension.intercept(HMessage.Direction.TOCLIENT, "SlideObjectBundle", this::onObjectMove); + extension.intercept(HMessage.Direction.TOCLIENT, "SlideObjectBundle", this::onSlide); + extension.intercept(HMessage.Direction.TOCLIENT, "WiredFurniMove", this::onFurniMove); extension.intercept(HMessage.Direction.TOCLIENT, "ObjectDataUpdate", this::onDataUpdate); extension.intercept(HMessage.Direction.TOCLIENT, "ObjectsDataUpdate", this::onDataUpdates); @@ -229,7 +229,7 @@ private void onObjectUpdate(HMessage hMessage) { addObject(hMessage.getPacket(), owner); } } - private void onObjectMove(HMessage hMessage) { + private void onSlide(HMessage hMessage) { if (inRoom()) { HPacket packet = hMessage.getPacket(); int oldx = packet.readInteger(); @@ -258,6 +258,31 @@ private void onObjectMove(HMessage hMessage) { } } + private void onFurniMove(HMessage hMessage) { + if (inRoom()) { + HPacket packet = hMessage.getPacket(); + synchronized (lock) { + int oldX = packet.readInteger(); + int oldY = packet.readInteger(); + int newX = packet.readInteger(); + int newY = packet.readInteger(); + + String oldZ = packet.readString(); + String newZ = packet.readString(); + + int furniId = packet.readInteger(); + + HFloorItem item = furniIdToItem.get(furniId); + if (item != null) { + furnimap.get(item.getTile().getX()).get(item.getTile().getY()).remove(item.getId()); + item.setTile(new HPoint(newX, newY, Double.parseDouble(newZ))); + furnimap.get(newX).get(newY).put(item.getId(), item); + } + } + } + } + + private void onDataUpdate(HPacket hPacket, int id) { // int id = Integer.parseInt(hPacket.readString()); int category = hPacket.readInteger();