diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.java b/src/main/java/de/bixilon/minosoft/Minosoft.java index 684ad77e1..d538fe405 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.java +++ b/src/main/java/de/bixilon/minosoft/Minosoft.java @@ -15,7 +15,7 @@ package de.bixilon.minosoft; import com.google.common.collect.HashBiMap; import de.bixilon.minosoft.config.Configuration; -import de.bixilon.minosoft.config.GameConfiguration; +import de.bixilon.minosoft.config.ConfigurationPaths; import de.bixilon.minosoft.data.mappings.versions.Versions; import de.bixilon.minosoft.gui.main.AccountListCell; import de.bixilon.minosoft.gui.main.MainWindow; @@ -34,7 +34,7 @@ import java.util.UUID; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; -public class Minosoft { +public final class Minosoft { public static final HashSet eventManagers = new HashSet<>(); private static final CountDownLatch startStatus = new CountDownLatch(2); // number of critical components (wait for them before other "big" actions) public static HashBiMap accountList; @@ -55,9 +55,9 @@ public class Minosoft { e.printStackTrace(); return; } - Log.info(String.format("Loaded config file (version=%s)", config.getInt(GameConfiguration.CONFIG_VERSION))); + Log.info(String.format("Loaded config file (version=%s)", config.getInt(ConfigurationPaths.CONFIG_VERSION))); // set log level from config - Log.setLevel(LogLevels.valueOf(config.getString(GameConfiguration.GENERAL_LOG_LEVEL))); + Log.setLevel(LogLevels.valueOf(config.getString(ConfigurationPaths.GENERAL_LOG_LEVEL))); Log.info(String.format("Logging info with level: %s", Log.getLevel())); serverList = config.getServers(); @@ -79,7 +79,7 @@ public class Minosoft { Log.debug("Refreshing client token..."); checkClientToken(); accountList = config.getMojangAccounts(); - selectAccount(accountList.get(config.getString(GameConfiguration.ACCOUNT_SELECTED))); + selectAccount(accountList.get(config.getString(ConfigurationPaths.ACCOUNT_SELECTED))); return true; }); startCallables.add(() -> { @@ -92,6 +92,7 @@ public class Minosoft { Launcher.start(); return true; }); + // If you add another "critical" component (wait for them at startup): You MUST adjust increment the number of the counter in `startStatus` (See in the first lines of this file) try { Util.executeInThreadPool("Start", startCallables); } catch (Exception e) { @@ -105,8 +106,8 @@ public class Minosoft { } public static void checkClientToken() { - if (config.getString(GameConfiguration.CLIENT_TOKEN).isBlank()) { - config.putString(GameConfiguration.CLIENT_TOKEN, UUID.randomUUID().toString()); + if (config.getString(ConfigurationPaths.CLIENT_TOKEN).isBlank()) { + config.putString(ConfigurationPaths.CLIENT_TOKEN, UUID.randomUUID().toString()); config.saveToFile(); } } @@ -114,7 +115,7 @@ public class Minosoft { public static void selectAccount(MojangAccount account) { if (account == null) { selectedAccount = null; - config.putString(GameConfiguration.ACCOUNT_SELECTED, ""); + config.putString(ConfigurationPaths.ACCOUNT_SELECTED, ""); config.saveToFile(); return; } @@ -126,7 +127,7 @@ public class Minosoft { selectedAccount = null; return; } - config.putString(GameConfiguration.ACCOUNT_SELECTED, account.getUserId()); + config.putString(ConfigurationPaths.ACCOUNT_SELECTED, account.getUserId()); selectedAccount = account; if (MainWindow.accountMenu2 != null) { MainWindow.accountMenu2.setText(String.format("Account (%s)", account.getPlayerName())); diff --git a/src/main/java/de/bixilon/minosoft/config/Configuration.java b/src/main/java/de/bixilon/minosoft/config/Configuration.java index 3972a110f..a405d16b6 100644 --- a/src/main/java/de/bixilon/minosoft/config/Configuration.java +++ b/src/main/java/de/bixilon/minosoft/config/Configuration.java @@ -88,21 +88,21 @@ public class Configuration { thread.start(); } - public boolean getBoolean(GameConfiguration path) { + public boolean getBoolean(ConfigurationPaths path) { return switch (path) { case NETWORK_FAKE_CLIENT_BRAND -> config.getAsJsonObject("network").get("fake-network-brand").getAsBoolean(); default -> throw new RuntimeException(String.format("Illegal boolean value: %s", path)); }; } - public void putBoolean(GameConfiguration path, boolean value) { + public void putBoolean(ConfigurationPaths path, boolean value) { switch (path) { case NETWORK_FAKE_CLIENT_BRAND -> config.getAsJsonObject("network").addProperty("fake-network-brand", value); default -> throw new RuntimeException(String.format("Illegal boolean value: %s", path)); } } - public int getInt(GameConfiguration path) { + public int getInt(ConfigurationPaths path) { return switch (path) { case CONFIG_VERSION -> config.getAsJsonObject("general").get("version").getAsInt(); case GAME_RENDER_DISTANCE -> config.getAsJsonObject("game").get("render-distance").getAsInt(); @@ -110,7 +110,7 @@ public class Configuration { }; } - public void putInt(GameConfiguration path, int value) { + public void putInt(ConfigurationPaths path, int value) { switch (path) { case CONFIG_VERSION -> config.getAsJsonObject("general").addProperty("version", value); case GAME_RENDER_DISTANCE -> config.getAsJsonObject("game").addProperty("render-distance", value); @@ -118,7 +118,7 @@ public class Configuration { } } - public String getString(GameConfiguration path) { + public String getString(ConfigurationPaths path) { return switch (path) { case ACCOUNT_SELECTED -> config.getAsJsonObject("accounts").get("selected").getAsString(); case GENERAL_LOG_LEVEL -> config.getAsJsonObject("general").get("log-level").getAsString(); @@ -128,7 +128,7 @@ public class Configuration { }; } - public void putString(GameConfiguration path, String value) { + public void putString(ConfigurationPaths path, String value) { switch (path) { case ACCOUNT_SELECTED -> config.getAsJsonObject("accounts").addProperty("selected", value); case GENERAL_LOG_LEVEL -> config.getAsJsonObject("general").addProperty("log-level", value); diff --git a/src/main/java/de/bixilon/minosoft/config/GameConfiguration.java b/src/main/java/de/bixilon/minosoft/config/ConfigurationPaths.java similarity index 96% rename from src/main/java/de/bixilon/minosoft/config/GameConfiguration.java rename to src/main/java/de/bixilon/minosoft/config/ConfigurationPaths.java index 605a2637a..743768414 100644 --- a/src/main/java/de/bixilon/minosoft/config/GameConfiguration.java +++ b/src/main/java/de/bixilon/minosoft/config/ConfigurationPaths.java @@ -13,7 +13,7 @@ package de.bixilon.minosoft.config; -public enum GameConfiguration { +public enum ConfigurationPaths { CONFIG_VERSION, GAME_RENDER_DISTANCE, NETWORK_FAKE_CLIENT_BRAND, @@ -21,4 +21,4 @@ public enum GameConfiguration { CLIENT_TOKEN, MAPPINGS_URL, ACCOUNT_SELECTED -} +} \ No newline at end of file diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/AbstractHorseMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/meta/AbstractHorseMetaData.java index 6e5ea4d05..63ceebe06 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/meta/AbstractHorseMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/AbstractHorseMetaData.java @@ -56,7 +56,7 @@ public abstract class AbstractHorseMetaData extends AnimalMetaData { } public HorseTypes getType() { - final int defaultValue = HorseTypes.HORSE.getId(); + final int defaultValue = HorseTypes.HORSE.ordinal(); if (protocolId < 57) { return HorseTypes.byId(sets.getInt(19, defaultValue)); } @@ -104,9 +104,5 @@ public abstract class AbstractHorseMetaData extends AnimalMetaData { public static HorseTypes byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/HorseMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/meta/HorseMetaData.java index b437852e9..814b23712 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/meta/HorseMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/HorseMetaData.java @@ -19,7 +19,7 @@ public class HorseMetaData extends AbstractHorseMetaData { } public HorseColors getColor() { - final int defaultValue = HorseColors.WHITE.getId(); + final int defaultValue = HorseColors.WHITE.ordinal(); if (protocolId < 57) { return HorseColors.byId(sets.getInt(20, defaultValue) & 0xFF); } @@ -33,7 +33,7 @@ public class HorseMetaData extends AbstractHorseMetaData { } public HorseDots getDots() { - final int defaultValue = HorseDots.NONE.getId() << 8; + final int defaultValue = HorseDots.NONE.ordinal() << 8; if (protocolId < 57) { return HorseDots.byId(sets.getInt(20, defaultValue) >> 8); } @@ -47,7 +47,7 @@ public class HorseMetaData extends AbstractHorseMetaData { } public HorseArmors getArmor() { - final int defaultValue = HorseArmors.NO_ARMOR.getId(); + final int defaultValue = HorseArmors.NO_ARMOR.ordinal(); if (protocolId < 57) { return HorseArmors.byId(sets.getInt(21, defaultValue)); } @@ -79,10 +79,6 @@ public class HorseMetaData extends AbstractHorseMetaData { public static HorseArmors byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public enum HorseColors { @@ -97,10 +93,6 @@ public class HorseMetaData extends AbstractHorseMetaData { public static HorseColors byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public enum HorseDots { @@ -113,9 +105,5 @@ public class HorseMetaData extends AbstractHorseMetaData { public static HorseDots byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/HumanMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/meta/HumanMetaData.java index 5892589f2..c0f023fde 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/meta/HumanMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/HumanMetaData.java @@ -40,7 +40,7 @@ public class HumanMetaData extends LivingMetaData { } public Hands getMainHand() { - final int defaultValue = Hands.LEFT.getId(); + final int defaultValue = Hands.LEFT.ordinal(); if (protocolId < 110) { //ToDo return Hands.byId(defaultValue); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/LivingMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/meta/LivingMetaData.java index c0f68609a..3072f521d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/meta/LivingMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/LivingMetaData.java @@ -32,7 +32,7 @@ public abstract class LivingMetaData extends EntityMetaData { } public Hands getActiveHand() { - final int defaultValue = Hands.LEFT.getId(); + final int defaultValue = Hands.LEFT.ordinal(); if (protocolId < 110) { //ToDo return Hands.byId(defaultValue); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/OcelotMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/meta/OcelotMetaData.java index 91aab5ffd..5523a2a9d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/meta/OcelotMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/OcelotMetaData.java @@ -19,7 +19,7 @@ public class OcelotMetaData extends AnimalMetaData { } public OcelotTypes getType() { - final int defaultValue = OcelotTypes.UNTAMED.getId(); + final int defaultValue = OcelotTypes.UNTAMED.ordinal(); if (protocolId < 57) { return OcelotTypes.byId(sets.getInt(18, defaultValue)); } @@ -46,28 +46,13 @@ public class OcelotMetaData extends AnimalMetaData { } public enum OcelotTypes { - UNTAMED(0), - TUXEDO(1), - TABBY(2), - SIAMESE(3); - - final int id; - - OcelotTypes(int id) { - this.id = id; - } + UNTAMED, + TUXEDO, + TABBY, + SIAMESE; public static OcelotTypes byId(int id) { - for (OcelotTypes type : values()) { - if (type.getId() == id) { - return type; - } - } - return null; - } - - public int getId() { - return id; + return values()[id]; } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/meta/PufferfishMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/meta/PufferfishMetaData.java index 078b3d6f5..8ec777ddb 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/meta/PufferfishMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/meta/PufferfishMetaData.java @@ -19,7 +19,7 @@ public class PufferfishMetaData extends AbstractFishMetaData { } public PufferStates getPufferState() { - final int defaultValue = PufferStates.UN_PUFFED.getId(); + final int defaultValue = PufferStates.UN_PUFFED.ordinal(); if (protocolId < 401) { // ToDo return PufferStates.byId(defaultValue); } @@ -32,27 +32,12 @@ public class PufferfishMetaData extends AbstractFishMetaData { } public enum PufferStates { - UN_PUFFED(0), - SEMI_PUFFED(1), - FULLY_PUFFED(2); - - final int id; - - PufferStates(int id) { - this.id = id; - } + UN_PUFFED, + SEMI_PUFFED, + FULLY_PUFFED; public static PufferStates byId(int id) { - for (PufferStates state : values()) { - if (state.getId() == id) { - return state; - } - } - return null; - } - - public int getId() { - return id; + return values()[id]; } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/objects/ItemFrame.java b/src/main/java/de/bixilon/minosoft/data/entities/objects/ItemFrame.java index 359edfc8a..6d25f3e07 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/objects/ItemFrame.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/objects/ItemFrame.java @@ -74,9 +74,5 @@ public class ItemFrame extends EntityObject implements ObjectInterface { public static FrameDirections byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/objects/Minecart.java b/src/main/java/de/bixilon/minosoft/data/entities/objects/Minecart.java index e760ec55f..3045510ad 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/objects/Minecart.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/objects/Minecart.java @@ -77,9 +77,5 @@ public class Minecart extends EntityObject implements ObjectInterface { public static MinecartTypes byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/data/inventory/InventorySlots.java b/src/main/java/de/bixilon/minosoft/data/inventory/InventorySlots.java index b394d2caa..069a0a124 100644 --- a/src/main/java/de/bixilon/minosoft/data/inventory/InventorySlots.java +++ b/src/main/java/de/bixilon/minosoft/data/inventory/InventorySlots.java @@ -77,10 +77,6 @@ public class InventorySlots { @Override public int getId(int protocolId) { - return getId(); - } - - public int getId() { return ordinal(); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/actions/PistonAction.java b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/actions/PistonAction.java index b9e7dfe9f..15373ae34 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/actions/PistonAction.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/actions/PistonAction.java @@ -30,26 +30,11 @@ public class PistonAction implements BlockAction { } public enum PistonStates { - PUSH(0), - PULL(1); - - final byte id; - - PistonStates(int id) { - this.id = (byte) id; - } + PUSH, + PULL; public static PistonStates byId(int id) { - for (PistonStates state : values()) { - if (state.getId() == id) { - return state; - } - } - return null; - } - - public byte getId() { - return id; + return values()[id]; } } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/versions/Versions.java b/src/main/java/de/bixilon/minosoft/data/mappings/versions/Versions.java index 8aacec430..16a636a8a 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/versions/Versions.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/versions/Versions.java @@ -18,7 +18,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import de.bixilon.minosoft.Config; import de.bixilon.minosoft.Minosoft; -import de.bixilon.minosoft.config.GameConfiguration; +import de.bixilon.minosoft.config.ConfigurationPaths; import de.bixilon.minosoft.data.Mappings; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.protocol.ConnectionStates; @@ -135,7 +135,7 @@ public class Versions { } catch (FileNotFoundException e) { long downloadStartTime = System.currentTimeMillis(); Log.info(String.format("Mappings for %s are not available on disk. Downloading them...", version.getVersionName())); - Util.downloadFile(String.format(Minosoft.getConfig().getString(GameConfiguration.MAPPINGS_URL), version.getVersionName()), fileName); + Util.downloadFile(String.format(Minosoft.getConfig().getString(ConfigurationPaths.MAPPINGS_URL), version.getVersionName()), fileName); try { files = Util.readJsonTarGzFile(fileName); } catch (ZipException e2) { diff --git a/src/main/java/de/bixilon/minosoft/data/player/Hands.java b/src/main/java/de/bixilon/minosoft/data/player/Hands.java index cacad944d..0b00de13c 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/Hands.java +++ b/src/main/java/de/bixilon/minosoft/data/player/Hands.java @@ -24,8 +24,4 @@ public enum Hands { public static Hands byBoolean(boolean id) { return id ? LEFT : RIGHT; } - - public int getId() { - return ordinal(); - } } \ No newline at end of file diff --git a/src/main/java/de/bixilon/minosoft/data/player/PingBars.java b/src/main/java/de/bixilon/minosoft/data/player/PingBars.java index 4cb8afdbc..10927b1cc 100644 --- a/src/main/java/de/bixilon/minosoft/data/player/PingBars.java +++ b/src/main/java/de/bixilon/minosoft/data/player/PingBars.java @@ -32,8 +32,7 @@ public enum PingBars { return BARS_3; } else if (ping < 1000) { return BARS_2; - } else { - return BRAS_1; } + return BRAS_1; } } \ No newline at end of file diff --git a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java index eee84c310..6efc79650 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java @@ -18,9 +18,9 @@ import de.bixilon.minosoft.data.Player; import de.bixilon.minosoft.data.mappings.versions.Version; import de.bixilon.minosoft.data.mappings.versions.Versions; import de.bixilon.minosoft.logging.Log; -import de.bixilon.minosoft.ping.ForgeModInfo; -import de.bixilon.minosoft.ping.ServerListPing; import de.bixilon.minosoft.protocol.network.Connection; +import de.bixilon.minosoft.protocol.ping.ForgeModInfo; +import de.bixilon.minosoft.protocol.ping.ServerListPing; import de.bixilon.minosoft.util.DNSUtil; import javafx.application.Platform; import javafx.fxml.FXML; diff --git a/src/main/java/de/bixilon/minosoft/gui/main/SettingsWindow.java b/src/main/java/de/bixilon/minosoft/gui/main/SettingsWindow.java index 65a29ca27..c77390b28 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/SettingsWindow.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/SettingsWindow.java @@ -14,7 +14,7 @@ package de.bixilon.minosoft.gui.main; import de.bixilon.minosoft.Minosoft; -import de.bixilon.minosoft.config.GameConfiguration; +import de.bixilon.minosoft.config.ConfigurationPaths; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.logging.LogLevels; import javafx.fxml.FXML; @@ -41,7 +41,7 @@ public class SettingsWindow implements Initializable { return; } Log.setLevel(newLevel); - Minosoft.getConfig().putString(GameConfiguration.GENERAL_LOG_LEVEL, newLevel.name()); + Minosoft.getConfig().putString(ConfigurationPaths.GENERAL_LOG_LEVEL, newLevel.name()); Minosoft.getConfig().saveToFile(); })); } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/MultiSlotChangeEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/MultiSlotChangeEvent.java new file mode 100644 index 000000000..8cd052bca --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/MultiSlotChangeEvent.java @@ -0,0 +1,48 @@ +/* + * Codename Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.modding.event.events; + +import de.bixilon.minosoft.data.inventory.Slot; +import de.bixilon.minosoft.protocol.network.Connection; +import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketWindowItems; + +public class MultiSlotChangeEvent extends Event { + private final byte windowId; + private final Slot[] data; + + + public MultiSlotChangeEvent(Connection connection, byte windowId, Slot[] data) { + super(connection); + this.windowId = windowId; + this.data = data; + } + + public MultiSlotChangeEvent(Connection connection, PacketWindowItems pkg) { + super(connection); + this.windowId = pkg.getWindowId(); + this.data = pkg.getData(); + } + + + public byte getWindowId() { + return windowId; + } + + /** + * @return Data array. Array position equals the slot id + */ + public Slot[] getData() { + return data; + } +} diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/SlotChangeEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/SingleSlotChangeEvent.java similarity index 87% rename from src/main/java/de/bixilon/minosoft/modding/event/events/SlotChangeEvent.java rename to src/main/java/de/bixilon/minosoft/modding/event/events/SingleSlotChangeEvent.java index 7673de533..bfe171b60 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/SlotChangeEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/SingleSlotChangeEvent.java @@ -17,20 +17,20 @@ import de.bixilon.minosoft.data.inventory.Slot; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.clientbound.play.PacketSetSlot; -public class SlotChangeEvent extends Event { +public class SingleSlotChangeEvent extends Event { private final byte windowId; private final short slotId; private final Slot slot; - public SlotChangeEvent(Connection connection, byte windowId, short slotId, Slot slot) { + public SingleSlotChangeEvent(Connection connection, byte windowId, short slotId, Slot slot) { super(connection); this.windowId = windowId; this.slotId = slotId; this.slot = slot; } - public SlotChangeEvent(Connection connection, PacketSetSlot pkg) { + public SingleSlotChangeEvent(Connection connection, PacketSetSlot pkg) { super(connection); this.windowId = pkg.getWindowId(); this.slotId = pkg.getSlotId(); diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/StatusResponseEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/StatusResponseEvent.java index 17d55ade9..830874f1b 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/StatusResponseEvent.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/StatusResponseEvent.java @@ -13,9 +13,9 @@ package de.bixilon.minosoft.modding.event.events; -import de.bixilon.minosoft.ping.ServerListPing; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.packets.clientbound.status.PacketStatusResponse; +import de.bixilon.minosoft.protocol.ping.ServerListPing; /** * Fired when the connection status is "STATUS" and the server send general information such as players online, motd, etc diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java index 5682239e5..4d894012d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java @@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.network; import de.bixilon.minosoft.Minosoft; -import de.bixilon.minosoft.PingCallback; import de.bixilon.minosoft.data.Player; import de.bixilon.minosoft.data.VelocityHandler; import de.bixilon.minosoft.data.mappings.CustomMapping; @@ -30,13 +29,14 @@ import de.bixilon.minosoft.modding.event.events.CancelableEvent; import de.bixilon.minosoft.modding.event.events.Event; import de.bixilon.minosoft.modding.event.events.PacketReceiveEvent; import de.bixilon.minosoft.modding.event.events.PacketSendEvent; -import de.bixilon.minosoft.ping.ServerListPing; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; import de.bixilon.minosoft.protocol.packets.ServerboundPacket; import de.bixilon.minosoft.protocol.packets.serverbound.handshaking.PacketHandshake; import de.bixilon.minosoft.protocol.packets.serverbound.login.PacketLoginStart; import de.bixilon.minosoft.protocol.packets.serverbound.status.PacketStatusPing; import de.bixilon.minosoft.protocol.packets.serverbound.status.PacketStatusRequest; +import de.bixilon.minosoft.protocol.ping.PingCallback; +import de.bixilon.minosoft.protocol.ping.ServerListPing; import de.bixilon.minosoft.protocol.protocol.*; import de.bixilon.minosoft.util.DNSUtil; import de.bixilon.minosoft.util.ServerAddress; diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketDecoder.java b/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketDecoder.java index 0885a52f1..c9303d45a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketDecoder.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketDecoder.java @@ -98,7 +98,7 @@ public class PacketDecoder extends ByteToMessageDecoder { try { packet = connection.getPacketByCommand(connection.getConnectionState(), inPacketBuffer.getCommand()); if (packet == null) { - Log.fatal(String.format("Version packet enum does not contain a packet with id 0x%x. Your version.json is broken!", inPacketBuffer.getCommand())); + Log.fatal(String.format("Packet mapping does not contain a packet with id 0x%x. The server sends bullshit or your versions.json broken!", inPacketBuffer.getCommand())); nettyNetwork.disconnect(); throw new RuntimeException("Invalid packet 0x%x" + inPacketBuffer.getCommand()); } diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketEncoder.java b/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketEncoder.java index 009aa7643..1266ea3ad 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketEncoder.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/netty/PacketEncoder.java @@ -45,12 +45,10 @@ public class PacketEncoder extends MessageToByteEncoder { byte[] compressed = Util.compress(data); compressedBuffer.writeVarInt(data.length); compressedBuffer.writeBytes(compressed); - outRawBuffer.writeVarInt(compressedBuffer.getOutBytes().length); - outRawBuffer.writeBytes(compressedBuffer.getOutBytes()); + outRawBuffer.prefixVarInt(compressedBuffer.getOutBytes().length); } else { + outRawBuffer.prefixVarInt(0); outRawBuffer.writeVarInt(data.length + 1); // 1 for the compressed length (0) - outRawBuffer.writeVarInt(0); - outRawBuffer.writeBytes(data); } data = outRawBuffer.getOutBytes(); } else { diff --git a/src/main/java/de/bixilon/minosoft/protocol/network/socket/SocketNetwork.java b/src/main/java/de/bixilon/minosoft/protocol/network/socket/SocketNetwork.java index 079805601..e85dd242b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/socket/SocketNetwork.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/socket/SocketNetwork.java @@ -108,12 +108,10 @@ public class SocketNetwork implements Network { byte[] compressed = Util.compress(data); compressedBuffer.writeVarInt(data.length); compressedBuffer.writeBytes(compressed); - outRawBuffer.writeVarInt(compressedBuffer.getOutBytes().length); - outRawBuffer.writeBytes(compressedBuffer.getOutBytes()); + outRawBuffer.prefixVarInt(compressedBuffer.getOutBytes().length); } else { + outRawBuffer.prefixVarInt(0); outRawBuffer.writeVarInt(data.length + 1); // 1 for the compressed length (0) - outRawBuffer.writeVarInt(0); - outRawBuffer.writeBytes(data); } data = outRawBuffer.getOutBytes(); } else { @@ -194,7 +192,7 @@ public class SocketNetwork implements Network { try { packet = connection.getPacketByCommand(connection.getConnectionState(), inPacketBuffer.getCommand()); if (packet == null) { - Log.fatal(String.format("Version packet enum does not contain a packet with id 0x%x. The server sent bullshit or your version.json is broken!", inPacketBuffer.getCommand())); + Log.fatal(String.format("Packet mapping does not contain a packet with id 0x%x. The server sends bullshit or your versions.json broken!", inPacketBuffer.getCommand())); disconnect(); lastException = new RuntimeException("Invalid packet 0x" + inPacketBuffer.getCommand()); throw lastException; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketBossBar.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketBossBar.java index e7b74c6e6..8184fb33b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketBossBar.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketBossBar.java @@ -124,10 +124,6 @@ public class PacketBossBar implements ClientboundPacket { public static BossBarActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public enum BossBarColors { @@ -142,10 +138,6 @@ public class PacketBossBar implements ClientboundPacket { public static BossBarColors byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public enum BossBarDivisions { @@ -158,9 +150,5 @@ public class PacketBossBar implements ClientboundPacket { public static BossBarDivisions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCombatEvent.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCombatEvent.java index 59eec6331..04e881a1a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCombatEvent.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketCombatEvent.java @@ -66,9 +66,5 @@ public class PacketCombatEvent implements ClientboundPacket { public static CombatEvents byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityProperties.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityProperties.java index fb81912e5..8f86e9ba3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityProperties.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityProperties.java @@ -84,9 +84,5 @@ public class PacketEntityProperties implements ClientboundPacket { public static ModifierActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityStatus.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityStatus.java index 11c0bae95..60573ef50 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityStatus.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketEntityStatus.java @@ -85,9 +85,5 @@ public class PacketEntityStatus implements ClientboundPacket { public static EntityStates byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketFacePlayer.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketFacePlayer.java index af26cf040..13d147a0f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketFacePlayer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketFacePlayer.java @@ -64,26 +64,11 @@ public class PacketFacePlayer implements ClientboundPacket { } public enum PlayerFaces { - FEET(0), - EYES(1); - - final int id; - - PlayerFaces(int id) { - this.id = id; - } + FEET, + EYES; public static PlayerFaces byId(int id) { - for (PlayerFaces face : values()) { - if (face.getId() == id) { - return face; - } - } - return null; - } - - public int getId() { - return id; + return values()[id]; } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketMapData.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketMapData.java index 0172d81ec..41cae5380 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketMapData.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketMapData.java @@ -170,10 +170,6 @@ public class PacketMapData implements ClientboundPacket { public static PacketMapDataDataActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public enum MapPinTypes { @@ -209,10 +205,6 @@ public class PacketMapData implements ClientboundPacket { public static MapPinTypes byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public static class MapPinSet { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerListItem.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerListItem.java index ec39f4af4..2369217b3 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerListItem.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketPlayerListItem.java @@ -105,9 +105,5 @@ public class PacketPlayerListItem implements ClientboundPacket { public static PlayerListItemActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardObjective.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardObjective.java index b108b48af..cf9b5d7f6 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardObjective.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardObjective.java @@ -85,10 +85,6 @@ public class PacketScoreboardObjective implements ClientboundPacket { public static ScoreboardObjectiveActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } public enum ScoreboardObjectiveTypes { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardUpdateScore.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardUpdateScore.java index fae984786..19026a576 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardUpdateScore.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketScoreboardUpdateScore.java @@ -80,9 +80,5 @@ public class PacketScoreboardUpdateScore implements ClientboundPacket { public static ScoreboardUpdateScoreActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketWorldBorder.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketWorldBorder.java index 62ca81861..af02d05c0 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketWorldBorder.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketWorldBorder.java @@ -125,9 +125,5 @@ public class PacketWorldBorder implements ClientboundPacket { public static WorldBorderActions byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/status/PacketStatusResponse.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/status/PacketStatusResponse.java index 615e33994..8c321e4c7 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/status/PacketStatusResponse.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/status/PacketStatusResponse.java @@ -14,8 +14,8 @@ package de.bixilon.minosoft.protocol.packets.clientbound.status; import de.bixilon.minosoft.logging.Log; -import de.bixilon.minosoft.ping.ServerListPing; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; +import de.bixilon.minosoft.protocol.ping.ServerListPing; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.PacketHandler; diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketAnimation.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketAnimation.java index 7dfb0c8ec..75f927359 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketAnimation.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketAnimation.java @@ -31,7 +31,7 @@ public class PacketAnimation implements ServerboundPacket { public OutPacketBuffer write(Connection connection) { OutPacketBuffer buffer = new OutPacketBuffer(connection, Packets.Serverbound.PLAY_ANIMATION); if (buffer.getProtocolId() >= 49) { - buffer.writeVarInt(hand.getId()); + buffer.writeVarInt(hand.ordinal()); } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java index 5cefbe207..ee329736d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientSettings.java @@ -53,7 +53,7 @@ public class PacketClientSettings implements ServerboundPacket { buffer.writeByte((byte) 0b01111111); // ToDo: skin parts } if (buffer.getProtocolId() >= 49) { - buffer.writeVarInt(mainHand.getId()); + buffer.writeVarInt(mainHand.ordinal()); } return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java index 485450638..967d3580b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketClientStatus.java @@ -31,9 +31,9 @@ public class PacketClientStatus implements ServerboundPacket { public OutPacketBuffer write(Connection connection) { OutPacketBuffer buffer = new OutPacketBuffer(connection, Packets.Serverbound.PLAY_CLIENT_STATUS); if (buffer.getProtocolId() < 7) { - buffer.writeByte((byte) status.getId()); + buffer.writeByte((byte) status.ordinal()); } else { - buffer.writeVarInt(status.getId()); + buffer.writeVarInt(status.ordinal()); } return buffer; } @@ -51,9 +51,5 @@ public class PacketClientStatus implements ServerboundPacket { public static ClientStates byId(int id) { return values()[id]; } - - public int getId() { - return ordinal(); - } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketInteractEntity.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketInteractEntity.java index 9a102691a..8aab76da9 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketInteractEntity.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketInteractEntity.java @@ -80,7 +80,7 @@ public class PacketInteractEntity implements ServerboundPacket { if (click == EntityInteractionClicks.INTERACT_AT || click == EntityInteractionClicks.INTERACT) { if (buffer.getProtocolId() >= 49) { - buffer.writeVarInt(hand.getId()); + buffer.writeVarInt(hand.ordinal()); } if (buffer.getProtocolId() >= 725 && buffer.getProtocolId() < 729) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java index bc90b133e..c41897abb 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketPlayerBlockPlacement.java @@ -65,7 +65,7 @@ public class PacketPlayerBlockPlacement implements ServerboundPacket { public OutPacketBuffer write(Connection connection) { OutPacketBuffer buffer = new OutPacketBuffer(connection, Packets.Serverbound.PLAY_PLAYER_BLOCK_PLACEMENT); if (buffer.getProtocolId() >= 453) { - buffer.writeVarInt(hand.getId()); + buffer.writeVarInt(hand.ordinal()); } if (buffer.getProtocolId() < 7) { buffer.writeBlockPositionByte(position); @@ -78,7 +78,7 @@ public class PacketPlayerBlockPlacement implements ServerboundPacket { } else { buffer.writeVarInt(direction); if (buffer.getProtocolId() < 453) { - buffer.writeVarInt(hand.getId()); + buffer.writeVarInt(hand.ordinal()); } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseItem.java b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseItem.java index ab13dcea7..9a4ad86a2 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseItem.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/serverbound/play/PacketUseItem.java @@ -30,7 +30,7 @@ public class PacketUseItem implements ServerboundPacket { @Override public OutPacketBuffer write(Connection connection) { OutPacketBuffer buffer = new OutPacketBuffer(connection, Packets.Serverbound.PLAY_USE_ITEM); - buffer.writeVarInt(hand.getId()); + buffer.writeVarInt(hand.ordinal()); return buffer; } diff --git a/src/main/java/de/bixilon/minosoft/ping/ForgeModInfo.java b/src/main/java/de/bixilon/minosoft/protocol/ping/ForgeModInfo.java similarity index 97% rename from src/main/java/de/bixilon/minosoft/ping/ForgeModInfo.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/ForgeModInfo.java index a6619afd6..b32c145bc 100644 --- a/src/main/java/de/bixilon/minosoft/ping/ForgeModInfo.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/ForgeModInfo.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.ping; +package de.bixilon.minosoft.protocol.ping; import com.google.gson.JsonArray; import com.google.gson.JsonElement; diff --git a/src/main/java/de/bixilon/minosoft/PingCallback.java b/src/main/java/de/bixilon/minosoft/protocol/ping/PingCallback.java similarity index 91% rename from src/main/java/de/bixilon/minosoft/PingCallback.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/PingCallback.java index b50990a39..4baf03ed7 100644 --- a/src/main/java/de/bixilon/minosoft/PingCallback.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/PingCallback.java @@ -11,9 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft; - -import de.bixilon.minosoft.ping.ServerListPing; +package de.bixilon.minosoft.protocol.ping; public interface PingCallback { void handle(ServerListPing ping); diff --git a/src/main/java/de/bixilon/minosoft/ping/ServerListPing.java b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerListPing.java similarity index 98% rename from src/main/java/de/bixilon/minosoft/ping/ServerListPing.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/ServerListPing.java index 805a65020..84e82406e 100644 --- a/src/main/java/de/bixilon/minosoft/ping/ServerListPing.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerListPing.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.ping; +package de.bixilon.minosoft.protocol.ping; import com.google.gson.JsonObject; import de.bixilon.minosoft.data.text.BaseComponent; diff --git a/src/main/java/de/bixilon/minosoft/ping/ServerModInfo.java b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerModInfo.java similarity index 95% rename from src/main/java/de/bixilon/minosoft/ping/ServerModInfo.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/ServerModInfo.java index 72e4da8be..29d6d6e08 100644 --- a/src/main/java/de/bixilon/minosoft/ping/ServerModInfo.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerModInfo.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.ping; +package de.bixilon.minosoft.protocol.ping; public interface ServerModInfo { String getBrand(); diff --git a/src/main/java/de/bixilon/minosoft/ping/ServerModItem.java b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerModItem.java similarity index 96% rename from src/main/java/de/bixilon/minosoft/ping/ServerModItem.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/ServerModItem.java index 9b5aae74b..bb3ba57f3 100644 --- a/src/main/java/de/bixilon/minosoft/ping/ServerModItem.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerModItem.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.ping; +package de.bixilon.minosoft.protocol.ping; public class ServerModItem { final String modId; diff --git a/src/main/java/de/bixilon/minosoft/ping/ServerModTypes.java b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerModTypes.java similarity index 95% rename from src/main/java/de/bixilon/minosoft/ping/ServerModTypes.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/ServerModTypes.java index 6750a3a2b..01d0bd34f 100644 --- a/src/main/java/de/bixilon/minosoft/ping/ServerModTypes.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/ServerModTypes.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.ping; +package de.bixilon.minosoft.protocol.ping; public enum ServerModTypes { VANILLA, diff --git a/src/main/java/de/bixilon/minosoft/ping/VanillaModInfo.java b/src/main/java/de/bixilon/minosoft/protocol/ping/VanillaModInfo.java similarity index 96% rename from src/main/java/de/bixilon/minosoft/ping/VanillaModInfo.java rename to src/main/java/de/bixilon/minosoft/protocol/ping/VanillaModInfo.java index f7cc6c88a..4a8b51fe2 100644 --- a/src/main/java/de/bixilon/minosoft/ping/VanillaModInfo.java +++ b/src/main/java/de/bixilon/minosoft/protocol/ping/VanillaModInfo.java @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.ping; +package de.bixilon.minosoft.protocol.ping; public class VanillaModInfo implements ServerModInfo { @Override diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java index 518c2a793..319f32d82 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java @@ -51,6 +51,13 @@ public class InByteBuffer { this.protocolId = connection.getVersion().getProtocolVersion(); } + public InByteBuffer(InByteBuffer buffer) { + this.bytes = buffer.getBytes(); + this.position = buffer.getPosition(); + this.connection = buffer.getConnection(); + this.protocolId = connection.getVersion().getProtocolVersion(); + } + public byte[] readByteArray() { int count; if (protocolId < 19) { diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java index d66d8bac2..1aac581db 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java @@ -26,15 +26,22 @@ import java.util.ArrayList; import java.util.UUID; public class OutByteBuffer { - final ArrayList bytes = new ArrayList<>(); + final ArrayList bytes; final Connection connection; final int protocolId; public OutByteBuffer(Connection connection) { + this.bytes = new ArrayList<>(); this.connection = connection; this.protocolId = connection.getVersion().getProtocolVersion(); } + public OutByteBuffer(OutByteBuffer buffer) { + this.bytes = (ArrayList) buffer.getBytes().clone(); + this.connection = buffer.getConnection(); + this.protocolId = buffer.getProtocolId(); + } + public void writeByteArray(byte[] data) { if (protocolId < 19) { writeShort((short) data.length); @@ -135,10 +142,6 @@ public class OutByteBuffer { writeInt((int) (d * 32.0D)); } - public void writeVarInt(int value) { - writeVarInt(value, bytes); - } - public ArrayList getBytes() { return bytes; } @@ -155,7 +158,7 @@ public class OutByteBuffer { writeLong((((long) (position.getX() & 0x3FFFFFF) << 38) | ((long) (position.getZ() & 0x3FFFFFF) << 12) | (long) (position.getY() & 0xFFF))); } - public static void writeVarInt(int value, ArrayList write) { + public void writeVarInt(int value) { // thanks https://wiki.vg/Protocol#VarInt_and_VarLong do { @@ -165,12 +168,23 @@ public class OutByteBuffer { if (value != 0) { temp |= 0b10000000; } - writeByte(temp, write); + writeByte(temp); } while (value != 0); } - public static void writeByte(byte b, ArrayList write) { - write.add(b); + public void prefixVarInt(int value) { + int count = 0; + // thanks https://wiki.vg/Protocol#VarInt_and_VarLong + do + { + byte temp = (byte) (value & 0b01111111); + // Note: >>> means that the sign bit is shifted with the rest of the number rather than being left alone + value >>>= 7; + if (value != 0) { + temp |= 0b10000000; + } + bytes.add(count++, temp); + } while (value != 0); } public void writeSlot(Slot slot) { @@ -245,4 +259,8 @@ public class OutByteBuffer { writeVarInt(entityId); } } + + public Connection getConnection() { + return connection; + } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java index fc144ca6f..4ee2e8d03 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutPacketBuffer.java @@ -15,8 +15,6 @@ package de.bixilon.minosoft.protocol.protocol; import de.bixilon.minosoft.protocol.network.Connection; -import java.util.ArrayList; - public class OutPacketBuffer extends OutByteBuffer { final int command; @@ -27,16 +25,9 @@ public class OutPacketBuffer extends OutByteBuffer { @Override public byte[] getOutBytes() { - ArrayList before = getBytes(); - ArrayList after = new ArrayList<>(); - writeVarInt(getCommand(), after); // second: command - after.addAll(before); // rest ist raw data - - byte[] ret = new byte[after.size()]; - for (int i = 0; i < after.size(); i++) { - ret[i] = after.get(i); - } - return ret; + OutByteBuffer ret = new OutByteBuffer(this); + ret.prefixVarInt(getCommand()); + return ret.getOutBytes(); } public int getCommand() { diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java index 9680ddb2a..773a64366 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -14,7 +14,7 @@ package de.bixilon.minosoft.protocol.protocol; import de.bixilon.minosoft.Minosoft; -import de.bixilon.minosoft.config.GameConfiguration; +import de.bixilon.minosoft.config.ConfigurationPaths; import de.bixilon.minosoft.data.GameModes; import de.bixilon.minosoft.data.entities.Entity; import de.bixilon.minosoft.data.entities.meta.HumanMetaData; @@ -199,7 +199,7 @@ public class PacketHandler { if (pkg.getChannel().equals(DefaultPluginChannels.MC_BRAND.getChangeableIdentifier().get(connection.getVersion().getProtocolVersion()))) { InByteBuffer data = pkg.getDataAsBuffer(); String serverVersion; - String clientVersion = (Minosoft.getConfig().getBoolean(GameConfiguration.NETWORK_FAKE_CLIENT_BRAND) ? "vanilla" : "Minosoft"); + String clientVersion = (Minosoft.getConfig().getBoolean(ConfigurationPaths.NETWORK_FAKE_CLIENT_BRAND) ? "vanilla" : "Minosoft"); OutByteBuffer toSend = new OutByteBuffer(connection); if (connection.getVersion().getProtocolVersion() < 29) { // no length prefix @@ -332,6 +332,8 @@ public class PacketHandler { } public void handle(PacketWindowItems pkg) { + connection.fireEvent(new MultiSlotChangeEvent(connection, pkg)); + connection.getPlayer().setInventory(pkg.getWindowId(), pkg.getData()); } @@ -519,7 +521,7 @@ public class PacketHandler { } public void handle(PacketSetSlot pkg) { - connection.fireEvent(new SlotChangeEvent(connection, pkg)); + connection.fireEvent(new SingleSlotChangeEvent(connection, pkg)); if (pkg.getWindowId() == -1) { // invalid window Id diff --git a/src/main/java/de/bixilon/minosoft/util/mojang/api/MojangAuthentication.java b/src/main/java/de/bixilon/minosoft/util/mojang/api/MojangAuthentication.java index edd82312f..66d522186 100644 --- a/src/main/java/de/bixilon/minosoft/util/mojang/api/MojangAuthentication.java +++ b/src/main/java/de/bixilon/minosoft/util/mojang/api/MojangAuthentication.java @@ -17,7 +17,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import de.bixilon.minosoft.Config; import de.bixilon.minosoft.Minosoft; -import de.bixilon.minosoft.config.GameConfiguration; +import de.bixilon.minosoft.config.ConfigurationPaths; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.util.HTTP; @@ -26,7 +26,7 @@ import java.net.http.HttpResponse; public final class MojangAuthentication { public static MojangAccountAuthenticationAttempt login(String username, String password) { - return login(Minosoft.getConfig().getString(GameConfiguration.CLIENT_TOKEN), username, password); + return login(Minosoft.getConfig().getString(ConfigurationPaths.CLIENT_TOKEN), username, password); } public static MojangAccountAuthenticationAttempt login(String clientToken, String username, String password) { @@ -81,7 +81,7 @@ public final class MojangAuthentication { } public static String refresh(String accessToken) { - return refresh(Minosoft.getConfig().getString(GameConfiguration.CLIENT_TOKEN), accessToken); + return refresh(Minosoft.getConfig().getString(ConfigurationPaths.CLIENT_TOKEN), accessToken); } public static String refresh(String clientToken, String accessToken) {