diff --git a/doc/MinecraftVersions.md b/doc/MinecraftVersions.md index e57321d50..8632432bc 100644 --- a/doc/MinecraftVersions.md +++ b/doc/MinecraftVersions.md @@ -35,4 +35,4 @@ you need to provide the full packet mapping. The id depends on the order. --- -Note: Do not check for protocolIds (especially in EntityMetaData or Packets), this data is not reliable! Use version Ids. \ No newline at end of file +Note: Do not check for protocolIds (especially in EntityMetaData or Packets), this data is not reliable (because snapshot ids are that much higher)! Use version Ids. diff --git a/pom.xml b/pom.xml index 4973cb567..adb07dab3 100644 --- a/pom.xml +++ b/pom.xml @@ -130,13 +130,13 @@ org.openjfx javafx-controls - 16-ea+3 + 16-ea+4 pom org.openjfx javafx-fxml - 16-ea+3 + 16-ea+4 pom @@ -149,5 +149,10 @@ jcl-core 2.8 + + commons-cli + commons-cli + 1.4 + diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.java b/src/main/java/de/bixilon/minosoft/Minosoft.java index 7734affc2..403bb9226 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.java +++ b/src/main/java/de/bixilon/minosoft/Minosoft.java @@ -30,6 +30,7 @@ import de.bixilon.minosoft.modding.loading.Priorities; import de.bixilon.minosoft.protocol.protocol.LANServerListener; import de.bixilon.minosoft.render.GameWindow; import de.bixilon.minosoft.util.CountUpAndDownLatch; +import de.bixilon.minosoft.util.MinosoftCommandLineArguments; import de.bixilon.minosoft.util.Util; import de.bixilon.minosoft.util.mojang.api.MojangAccount; import de.bixilon.minosoft.util.task.AsyncTaskWorker; @@ -54,6 +55,7 @@ public final class Minosoft { public static Configuration config; public static void main(String[] args) { + MinosoftCommandLineArguments.parseCommandLineArguments(args); Log.info("Starting..."); AsyncTaskWorker taskWorker = new AsyncTaskWorker("StartUp"); diff --git a/src/main/java/de/bixilon/minosoft/config/ConfigMigrationException.java b/src/main/java/de/bixilon/minosoft/config/ConfigMigrationException.java index 5179c7e82..0626923b2 100644 --- a/src/main/java/de/bixilon/minosoft/config/ConfigMigrationException.java +++ b/src/main/java/de/bixilon/minosoft/config/ConfigMigrationException.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.config; public class ConfigMigrationException extends Exception { + public ConfigMigrationException() { } diff --git a/src/main/java/de/bixilon/minosoft/config/Configuration.java b/src/main/java/de/bixilon/minosoft/config/Configuration.java index 55fff4b43..70da34774 100644 --- a/src/main/java/de/bixilon/minosoft/config/Configuration.java +++ b/src/main/java/de/bixilon/minosoft/config/Configuration.java @@ -33,19 +33,19 @@ public class Configuration { private final Object lock = new Object(); public Configuration() throws IOException, ConfigMigrationException { - File file = new File(StaticConfiguration.HOME_DIR + "config/" + StaticConfiguration.CONFIG_FILENAME); + File file = new File(StaticConfiguration.HOME_DIRECTORY + "config/" + StaticConfiguration.CONFIG_FILENAME); if (!file.exists()) { // no configuration file InputStream input = getClass().getResourceAsStream("/config/" + StaticConfiguration.CONFIG_FILENAME); if (input == null) { throw new FileNotFoundException(String.format("[Config] Missing default config: %s!", StaticConfiguration.CONFIG_FILENAME)); } - File folder = new File(StaticConfiguration.HOME_DIR + "config/"); + File folder = new File(StaticConfiguration.HOME_DIRECTORY + "config/"); if (!folder.exists() && !folder.mkdirs()) { throw new IOException("[Config] Could not create config folder!"); } Files.copy(input, Paths.get(file.getAbsolutePath())); - file = new File(StaticConfiguration.HOME_DIR + "config/" + StaticConfiguration.CONFIG_FILENAME); + file = new File(StaticConfiguration.HOME_DIRECTORY + "config/" + StaticConfiguration.CONFIG_FILENAME); } config = Util.readJsonFromFile(file.getAbsolutePath()); int configVersion = getInt(ConfigurationPaths.IntegerPaths.GENERAL_CONFIG_VERSION); @@ -67,7 +67,7 @@ public class Configuration { } } // write config to temp file, delete original config, rename temp file to original file to avoid conflicts if minosoft gets closed while saving the config - File tempFile = new File(StaticConfiguration.HOME_DIR + "config/" + StaticConfiguration.CONFIG_FILENAME + ".tmp"); + File tempFile = new File(StaticConfiguration.HOME_DIRECTORY + "config/" + StaticConfiguration.CONFIG_FILENAME + ".tmp"); Gson gson = new GsonBuilder().setPrettyPrinting().create(); FileWriter writer; try { diff --git a/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.java b/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.java index 8c8843e4b..2264c6e0f 100644 --- a/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.java +++ b/src/main/java/de/bixilon/minosoft/config/StaticConfiguration.java @@ -18,13 +18,13 @@ import de.bixilon.minosoft.util.OSUtil; import java.io.File; public class StaticConfiguration { - public static final String CONFIG_FILENAME = "config.json"; // Filename of minosoft's base configuration (located in AppData/Minosoft/config) - public static final boolean SKIP_MOJANG_AUTHENTICATION = false; // disables all connections to mojang - public static final boolean COLORED_LOG = true; // the log should be colored with ANSI (does not affect base components) - public static final boolean LOG_RELATIVE_TIME = false; // prefix all log messages with the relative start time in milliseconds instead of the formatted time - public static final boolean VERBOSE_ENTITY_META_DATA_LOGGING = true; // if true, the entity meta data is getting serial + public static String CONFIG_FILENAME = "config.json"; // Filename of minosoft's base configuration (located in AppData/Minosoft/config) + public static boolean SKIP_MOJANG_AUTHENTICATION = false; // disables all connections to mojang + public static boolean COLORED_LOG = true; // the log should be colored with ANSI (does not affect base components) + public static boolean LOG_RELATIVE_TIME = false; // prefix all log messages with the relative start time in milliseconds instead of the formatted time + public static boolean VERBOSE_ENTITY_META_DATA_LOGGING = false; // if true, the entity meta data is getting serial - public static final String HOME_DIR; + public static String HOME_DIRECTORY; static { // Sets Config.homeDir to the correct folder per OS @@ -44,6 +44,6 @@ public class StaticConfiguration { // failed creating folder throw new RuntimeException(String.format("Could not create home folder (%s)!", homeDir)); } - HOME_DIR = folder.getAbsolutePath() + "/"; + HOME_DIRECTORY = folder.getAbsolutePath() + "/"; } } diff --git a/src/main/java/de/bixilon/minosoft/data/ChangeableIdentifier.java b/src/main/java/de/bixilon/minosoft/data/ChangeableIdentifier.java index 2e74bd6fc..a0b56f4c5 100644 --- a/src/main/java/de/bixilon/minosoft/data/ChangeableIdentifier.java +++ b/src/main/java/de/bixilon/minosoft/data/ChangeableIdentifier.java @@ -19,7 +19,7 @@ import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; import java.util.TreeMap; public class ChangeableIdentifier extends VersionValueMap { - String mod = "minecraft"; + String mod = ProtocolDefinition.DEFAULT_MOD; public ChangeableIdentifier(String legacy, String water) { values.put(Versions.LOWEST_VERSION_SUPPORTED.getVersionId(), legacy); @@ -47,12 +47,12 @@ public class ChangeableIdentifier extends VersionValueMap { public boolean isValidName(String name, int versionId) { name = name.toLowerCase(); if (name.indexOf(":") != 0) { - String[] splittedName = name.split(":", 2); - if (!mod.equals(splittedName[0])) { + String[] splitName = name.split(":", 2); + if (!mod.equals(splitName[0])) { // mod is not correct return false; } - name = splittedName[1]; + name = splitName[1]; // split and check mod } diff --git a/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java b/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java index 844f5d133..5dd3578d2 100644 --- a/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java +++ b/src/main/java/de/bixilon/minosoft/data/EntityClassMappings.java @@ -43,124 +43,124 @@ import de.bixilon.minosoft.data.entities.entities.npc.WanderingTrader; import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity; import de.bixilon.minosoft.data.entities.entities.projectile.*; import de.bixilon.minosoft.data.entities.entities.vehicle.*; -import javafx.util.Pair; +import de.bixilon.minosoft.data.mappings.ModIdentifier; public final class EntityClassMappings { - public static final HashBiMap, Pair> ENTITY_CLASS_MAPPINGS = HashBiMap.create(); + public static final HashBiMap, ModIdentifier> ENTITY_CLASS_MAPPINGS = HashBiMap.create(); static { - ENTITY_CLASS_MAPPINGS.put(AreaEffectCloud.class, new Pair<>("minecraft", "area_effect_cloud")); - ENTITY_CLASS_MAPPINGS.put(ArmorStand.class, new Pair<>("minecraft", "armor_stand")); - ENTITY_CLASS_MAPPINGS.put(Arrow.class, new Pair<>("minecraft", "arrow")); - ENTITY_CLASS_MAPPINGS.put(Bat.class, new Pair<>("minecraft", "bat")); - ENTITY_CLASS_MAPPINGS.put(Bee.class, new Pair<>("minecraft", "bee")); - ENTITY_CLASS_MAPPINGS.put(Blaze.class, new Pair<>("minecraft", "blaze")); - ENTITY_CLASS_MAPPINGS.put(Boat.class, new Pair<>("minecraft", "boat")); - ENTITY_CLASS_MAPPINGS.put(Cat.class, new Pair<>("minecraft", "cat")); - ENTITY_CLASS_MAPPINGS.put(CaveSpider.class, new Pair<>("minecraft", "cave_spider")); - ENTITY_CLASS_MAPPINGS.put(Chicken.class, new Pair<>("minecraft", "chicken")); - ENTITY_CLASS_MAPPINGS.put(Cod.class, new Pair<>("minecraft", "cod")); - ENTITY_CLASS_MAPPINGS.put(Cow.class, new Pair<>("minecraft", "cow")); - ENTITY_CLASS_MAPPINGS.put(Creeper.class, new Pair<>("minecraft", "creeper")); - ENTITY_CLASS_MAPPINGS.put(Dolphin.class, new Pair<>("minecraft", "dolphin")); - ENTITY_CLASS_MAPPINGS.put(Donkey.class, new Pair<>("minecraft", "donkey")); - ENTITY_CLASS_MAPPINGS.put(DragonFireball.class, new Pair<>("minecraft", "dragon_fireball")); - ENTITY_CLASS_MAPPINGS.put(Drowned.class, new Pair<>("minecraft", "drowned")); - ENTITY_CLASS_MAPPINGS.put(ElderGuardian.class, new Pair<>("minecraft", "elder_guardian")); - ENTITY_CLASS_MAPPINGS.put(EndCrystal.class, new Pair<>("minecraft", "end_crystal")); - ENTITY_CLASS_MAPPINGS.put(EnderDragon.class, new Pair<>("minecraft", "ender_dragon")); - ENTITY_CLASS_MAPPINGS.put(Enderman.class, new Pair<>("minecraft", "enderman")); - ENTITY_CLASS_MAPPINGS.put(Endermite.class, new Pair<>("minecraft", "endermite")); - ENTITY_CLASS_MAPPINGS.put(Evoker.class, new Pair<>("minecraft", "evoker")); - ENTITY_CLASS_MAPPINGS.put(EvokerFangs.class, new Pair<>("minecraft", "evoker_fangs")); - ENTITY_CLASS_MAPPINGS.put(ExperienceOrb.class, new Pair<>("minecraft", "experience_orb")); - ENTITY_CLASS_MAPPINGS.put(ThrownEyeOfEnder.class, new Pair<>("minecraft", "eye_of_ender")); - ENTITY_CLASS_MAPPINGS.put(FallingBlock.class, new Pair<>("minecraft", "falling_block")); - ENTITY_CLASS_MAPPINGS.put(FireworkRocketEntity.class, new Pair<>("minecraft", "firework_rocket")); - ENTITY_CLASS_MAPPINGS.put(Fox.class, new Pair<>("minecraft", "fox")); - ENTITY_CLASS_MAPPINGS.put(Ghast.class, new Pair<>("minecraft", "ghast")); - ENTITY_CLASS_MAPPINGS.put(Giant.class, new Pair<>("minecraft", "giant")); - ENTITY_CLASS_MAPPINGS.put(Guardian.class, new Pair<>("minecraft", "guardian")); - ENTITY_CLASS_MAPPINGS.put(Hoglin.class, new Pair<>("minecraft", "hoglin")); - ENTITY_CLASS_MAPPINGS.put(Horse.class, new Pair<>("minecraft", "horse")); - ENTITY_CLASS_MAPPINGS.put(Husk.class, new Pair<>("minecraft", "husk")); - ENTITY_CLASS_MAPPINGS.put(Illusioner.class, new Pair<>("minecraft", "illusioner")); - ENTITY_CLASS_MAPPINGS.put(IronGolem.class, new Pair<>("minecraft", "iron_golem")); - ENTITY_CLASS_MAPPINGS.put(ItemEntity.class, new Pair<>("minecraft", "item")); - ENTITY_CLASS_MAPPINGS.put(ItemFrame.class, new Pair<>("minecraft", "item_frame")); - ENTITY_CLASS_MAPPINGS.put(LargeFireball.class, new Pair<>("minecraft", "fireball")); - ENTITY_CLASS_MAPPINGS.put(LeashFenceKnotEntity.class, new Pair<>("minecraft", "leash_knot")); - ENTITY_CLASS_MAPPINGS.put(LightningBolt.class, new Pair<>("minecraft", "lightning_bolt")); - ENTITY_CLASS_MAPPINGS.put(Llama.class, new Pair<>("minecraft", "llama")); - ENTITY_CLASS_MAPPINGS.put(LlamaSpit.class, new Pair<>("minecraft", "llama_spit")); - ENTITY_CLASS_MAPPINGS.put(MagmaCube.class, new Pair<>("minecraft", "magma_cube")); - ENTITY_CLASS_MAPPINGS.put(Minecart.class, new Pair<>("minecraft", "minecart")); - ENTITY_CLASS_MAPPINGS.put(MinecartChest.class, new Pair<>("minecraft", "chest_minecart")); - ENTITY_CLASS_MAPPINGS.put(MinecartCommandBlock.class, new Pair<>("minecraft", "command_block_minecart")); - ENTITY_CLASS_MAPPINGS.put(MinecartFurnace.class, new Pair<>("minecraft", "furnace_minecart")); - ENTITY_CLASS_MAPPINGS.put(MinecartHopper.class, new Pair<>("minecraft", "hopper_minecart")); - ENTITY_CLASS_MAPPINGS.put(MinecartSpawner.class, new Pair<>("minecraft", "spawner_minecart")); - ENTITY_CLASS_MAPPINGS.put(MinecartTNT.class, new Pair<>("minecraft", "tnt_minecart")); - ENTITY_CLASS_MAPPINGS.put(Mule.class, new Pair<>("minecraft", "mule")); - ENTITY_CLASS_MAPPINGS.put(Mooshroom.class, new Pair<>("minecraft", "mooshroom")); - ENTITY_CLASS_MAPPINGS.put(Ocelot.class, new Pair<>("minecraft", "ocelot")); - ENTITY_CLASS_MAPPINGS.put(Painting.class, new Pair<>("minecraft", "painting")); - ENTITY_CLASS_MAPPINGS.put(Panda.class, new Pair<>("minecraft", "panda")); - ENTITY_CLASS_MAPPINGS.put(Parrot.class, new Pair<>("minecraft", "parrot")); - ENTITY_CLASS_MAPPINGS.put(Phantom.class, new Pair<>("minecraft", "phantom")); - ENTITY_CLASS_MAPPINGS.put(Pig.class, new Pair<>("minecraft", "pig")); - ENTITY_CLASS_MAPPINGS.put(Piglin.class, new Pair<>("minecraft", "piglin")); - ENTITY_CLASS_MAPPINGS.put(PiglinBrute.class, new Pair<>("minecraft", "piglin_brute")); - ENTITY_CLASS_MAPPINGS.put(Pillager.class, new Pair<>("minecraft", "pillager")); - ENTITY_CLASS_MAPPINGS.put(PolarBear.class, new Pair<>("minecraft", "polar_bear")); - ENTITY_CLASS_MAPPINGS.put(PrimedTNT.class, new Pair<>("minecraft", "tnt")); - ENTITY_CLASS_MAPPINGS.put(PufferFish.class, new Pair<>("minecraft", "pufferfish")); - ENTITY_CLASS_MAPPINGS.put(Rabbit.class, new Pair<>("minecraft", "rabbit")); - ENTITY_CLASS_MAPPINGS.put(Ravenger.class, new Pair<>("minecraft", "ravager")); - ENTITY_CLASS_MAPPINGS.put(Salmon.class, new Pair<>("minecraft", "salmon")); - ENTITY_CLASS_MAPPINGS.put(Sheep.class, new Pair<>("minecraft", "sheep")); - ENTITY_CLASS_MAPPINGS.put(Shulker.class, new Pair<>("minecraft", "shulker")); - ENTITY_CLASS_MAPPINGS.put(ShulkerBullet.class, new Pair<>("minecraft", "shulker_bullet")); - ENTITY_CLASS_MAPPINGS.put(Silverfish.class, new Pair<>("minecraft", "silverfish")); - ENTITY_CLASS_MAPPINGS.put(Skeleton.class, new Pair<>("minecraft", "skeleton")); - ENTITY_CLASS_MAPPINGS.put(SkeletonHorse.class, new Pair<>("minecraft", "skeleton_horse")); - ENTITY_CLASS_MAPPINGS.put(Slime.class, new Pair<>("minecraft", "slime")); - ENTITY_CLASS_MAPPINGS.put(SmallFireball.class, new Pair<>("minecraft", "small_fireball")); - ENTITY_CLASS_MAPPINGS.put(SnowGolem.class, new Pair<>("minecraft", "snow_golem")); - ENTITY_CLASS_MAPPINGS.put(ThrownSnowball.class, new Pair<>("minecraft", "snowball")); - ENTITY_CLASS_MAPPINGS.put(SpectralArrow.class, new Pair<>("minecraft", "spectral_arrow")); - ENTITY_CLASS_MAPPINGS.put(Spider.class, new Pair<>("minecraft", "spider")); - ENTITY_CLASS_MAPPINGS.put(Squid.class, new Pair<>("minecraft", "squid")); - ENTITY_CLASS_MAPPINGS.put(Stray.class, new Pair<>("minecraft", "stray")); - ENTITY_CLASS_MAPPINGS.put(Strider.class, new Pair<>("minecraft", "strider")); - ENTITY_CLASS_MAPPINGS.put(ThrownEgg.class, new Pair<>("minecraft", "egg")); - ENTITY_CLASS_MAPPINGS.put(ThrownEnderPearl.class, new Pair<>("minecraft", "ender_pearl")); - ENTITY_CLASS_MAPPINGS.put(ThrownExperienceBottle.class, new Pair<>("minecraft", "experience_bottle")); - ENTITY_CLASS_MAPPINGS.put(ThrownPotion.class, new Pair<>("minecraft", "potion")); - ENTITY_CLASS_MAPPINGS.put(ThrownTrident.class, new Pair<>("minecraft", "trident")); - ENTITY_CLASS_MAPPINGS.put(TraderLlama.class, new Pair<>("minecraft", "trader_llama")); - ENTITY_CLASS_MAPPINGS.put(TropicalFish.class, new Pair<>("minecraft", "tropical_fish")); - ENTITY_CLASS_MAPPINGS.put(Turtle.class, new Pair<>("minecraft", "turtle")); - ENTITY_CLASS_MAPPINGS.put(Vex.class, new Pair<>("minecraft", "vex")); - ENTITY_CLASS_MAPPINGS.put(Villager.class, new Pair<>("minecraft", "villager")); - ENTITY_CLASS_MAPPINGS.put(Vindicator.class, new Pair<>("minecraft", "vindicator")); - ENTITY_CLASS_MAPPINGS.put(WanderingTrader.class, new Pair<>("minecraft", "wandering_trader")); - ENTITY_CLASS_MAPPINGS.put(Witch.class, new Pair<>("minecraft", "witch")); - ENTITY_CLASS_MAPPINGS.put(WitherBoss.class, new Pair<>("minecraft", "wither")); - ENTITY_CLASS_MAPPINGS.put(WitherSkeleton.class, new Pair<>("minecraft", "wither_skeleton")); - ENTITY_CLASS_MAPPINGS.put(WitherSkull.class, new Pair<>("minecraft", "wither_skull")); - ENTITY_CLASS_MAPPINGS.put(Wolf.class, new Pair<>("minecraft", "wolf")); - ENTITY_CLASS_MAPPINGS.put(Zoglin.class, new Pair<>("minecraft", "zoglin")); - ENTITY_CLASS_MAPPINGS.put(Zombie.class, new Pair<>("minecraft", "zombie")); - ENTITY_CLASS_MAPPINGS.put(ZombieHorse.class, new Pair<>("minecraft", "zombie_horse")); - ENTITY_CLASS_MAPPINGS.put(ZombieVillager.class, new Pair<>("minecraft", "zombie_villager")); - ENTITY_CLASS_MAPPINGS.put(ZombifiedPiglin.class, new Pair<>("minecraft", "zombified_piglin")); - ENTITY_CLASS_MAPPINGS.put(PlayerEntity.class, new Pair<>("minecraft", "player")); - ENTITY_CLASS_MAPPINGS.put(FishingHook.class, new Pair<>("minecraft", "fishing_bobber")); + ENTITY_CLASS_MAPPINGS.put(AreaEffectCloud.class, new ModIdentifier("area_effect_cloud")); + ENTITY_CLASS_MAPPINGS.put(ArmorStand.class, new ModIdentifier("armor_stand")); + ENTITY_CLASS_MAPPINGS.put(Arrow.class, new ModIdentifier("arrow")); + ENTITY_CLASS_MAPPINGS.put(Bat.class, new ModIdentifier("bat")); + ENTITY_CLASS_MAPPINGS.put(Bee.class, new ModIdentifier("bee")); + ENTITY_CLASS_MAPPINGS.put(Blaze.class, new ModIdentifier("blaze")); + ENTITY_CLASS_MAPPINGS.put(Boat.class, new ModIdentifier("boat")); + ENTITY_CLASS_MAPPINGS.put(Cat.class, new ModIdentifier("cat")); + ENTITY_CLASS_MAPPINGS.put(CaveSpider.class, new ModIdentifier("cave_spider")); + ENTITY_CLASS_MAPPINGS.put(Chicken.class, new ModIdentifier("chicken")); + ENTITY_CLASS_MAPPINGS.put(Cod.class, new ModIdentifier("cod")); + ENTITY_CLASS_MAPPINGS.put(Cow.class, new ModIdentifier("cow")); + ENTITY_CLASS_MAPPINGS.put(Creeper.class, new ModIdentifier("creeper")); + ENTITY_CLASS_MAPPINGS.put(Dolphin.class, new ModIdentifier("dolphin")); + ENTITY_CLASS_MAPPINGS.put(Donkey.class, new ModIdentifier("donkey")); + ENTITY_CLASS_MAPPINGS.put(DragonFireball.class, new ModIdentifier("dragon_fireball")); + ENTITY_CLASS_MAPPINGS.put(Drowned.class, new ModIdentifier("drowned")); + ENTITY_CLASS_MAPPINGS.put(ElderGuardian.class, new ModIdentifier("elder_guardian")); + ENTITY_CLASS_MAPPINGS.put(EndCrystal.class, new ModIdentifier("end_crystal")); + ENTITY_CLASS_MAPPINGS.put(EnderDragon.class, new ModIdentifier("ender_dragon")); + ENTITY_CLASS_MAPPINGS.put(Enderman.class, new ModIdentifier("enderman")); + ENTITY_CLASS_MAPPINGS.put(Endermite.class, new ModIdentifier("endermite")); + ENTITY_CLASS_MAPPINGS.put(Evoker.class, new ModIdentifier("evoker")); + ENTITY_CLASS_MAPPINGS.put(EvokerFangs.class, new ModIdentifier("evoker_fangs")); + ENTITY_CLASS_MAPPINGS.put(ExperienceOrb.class, new ModIdentifier("experience_orb")); + ENTITY_CLASS_MAPPINGS.put(ThrownEyeOfEnder.class, new ModIdentifier("eye_of_ender")); + ENTITY_CLASS_MAPPINGS.put(FallingBlock.class, new ModIdentifier("falling_block")); + ENTITY_CLASS_MAPPINGS.put(FireworkRocketEntity.class, new ModIdentifier("firework_rocket")); + ENTITY_CLASS_MAPPINGS.put(Fox.class, new ModIdentifier("fox")); + ENTITY_CLASS_MAPPINGS.put(Ghast.class, new ModIdentifier("ghast")); + ENTITY_CLASS_MAPPINGS.put(Giant.class, new ModIdentifier("giant")); + ENTITY_CLASS_MAPPINGS.put(Guardian.class, new ModIdentifier("guardian")); + ENTITY_CLASS_MAPPINGS.put(Hoglin.class, new ModIdentifier("hoglin")); + ENTITY_CLASS_MAPPINGS.put(Horse.class, new ModIdentifier("horse")); + ENTITY_CLASS_MAPPINGS.put(Husk.class, new ModIdentifier("husk")); + ENTITY_CLASS_MAPPINGS.put(Illusioner.class, new ModIdentifier("illusioner")); + ENTITY_CLASS_MAPPINGS.put(IronGolem.class, new ModIdentifier("iron_golem")); + ENTITY_CLASS_MAPPINGS.put(ItemEntity.class, new ModIdentifier("item")); + ENTITY_CLASS_MAPPINGS.put(ItemFrame.class, new ModIdentifier("item_frame")); + ENTITY_CLASS_MAPPINGS.put(LargeFireball.class, new ModIdentifier("fireball")); + ENTITY_CLASS_MAPPINGS.put(LeashFenceKnotEntity.class, new ModIdentifier("leash_knot")); + ENTITY_CLASS_MAPPINGS.put(LightningBolt.class, new ModIdentifier("lightning_bolt")); + ENTITY_CLASS_MAPPINGS.put(Llama.class, new ModIdentifier("llama")); + ENTITY_CLASS_MAPPINGS.put(LlamaSpit.class, new ModIdentifier("llama_spit")); + ENTITY_CLASS_MAPPINGS.put(MagmaCube.class, new ModIdentifier("magma_cube")); + ENTITY_CLASS_MAPPINGS.put(Minecart.class, new ModIdentifier("minecart")); + ENTITY_CLASS_MAPPINGS.put(MinecartChest.class, new ModIdentifier("chest_minecart")); + ENTITY_CLASS_MAPPINGS.put(MinecartCommandBlock.class, new ModIdentifier("command_block_minecart")); + ENTITY_CLASS_MAPPINGS.put(MinecartFurnace.class, new ModIdentifier("furnace_minecart")); + ENTITY_CLASS_MAPPINGS.put(MinecartHopper.class, new ModIdentifier("hopper_minecart")); + ENTITY_CLASS_MAPPINGS.put(MinecartSpawner.class, new ModIdentifier("spawner_minecart")); + ENTITY_CLASS_MAPPINGS.put(MinecartTNT.class, new ModIdentifier("tnt_minecart")); + ENTITY_CLASS_MAPPINGS.put(Mule.class, new ModIdentifier("mule")); + ENTITY_CLASS_MAPPINGS.put(Mooshroom.class, new ModIdentifier("mooshroom")); + ENTITY_CLASS_MAPPINGS.put(Ocelot.class, new ModIdentifier("ocelot")); + ENTITY_CLASS_MAPPINGS.put(Painting.class, new ModIdentifier("painting")); + ENTITY_CLASS_MAPPINGS.put(Panda.class, new ModIdentifier("panda")); + ENTITY_CLASS_MAPPINGS.put(Parrot.class, new ModIdentifier("parrot")); + ENTITY_CLASS_MAPPINGS.put(Phantom.class, new ModIdentifier("phantom")); + ENTITY_CLASS_MAPPINGS.put(Pig.class, new ModIdentifier("pig")); + ENTITY_CLASS_MAPPINGS.put(Piglin.class, new ModIdentifier("piglin")); + ENTITY_CLASS_MAPPINGS.put(PiglinBrute.class, new ModIdentifier("piglin_brute")); + ENTITY_CLASS_MAPPINGS.put(Pillager.class, new ModIdentifier("pillager")); + ENTITY_CLASS_MAPPINGS.put(PolarBear.class, new ModIdentifier("polar_bear")); + ENTITY_CLASS_MAPPINGS.put(PrimedTNT.class, new ModIdentifier("tnt")); + ENTITY_CLASS_MAPPINGS.put(PufferFish.class, new ModIdentifier("pufferfish")); + ENTITY_CLASS_MAPPINGS.put(Rabbit.class, new ModIdentifier("rabbit")); + ENTITY_CLASS_MAPPINGS.put(Ravenger.class, new ModIdentifier("ravager")); + ENTITY_CLASS_MAPPINGS.put(Salmon.class, new ModIdentifier("salmon")); + ENTITY_CLASS_MAPPINGS.put(Sheep.class, new ModIdentifier("sheep")); + ENTITY_CLASS_MAPPINGS.put(Shulker.class, new ModIdentifier("shulker")); + ENTITY_CLASS_MAPPINGS.put(ShulkerBullet.class, new ModIdentifier("shulker_bullet")); + ENTITY_CLASS_MAPPINGS.put(Silverfish.class, new ModIdentifier("silverfish")); + ENTITY_CLASS_MAPPINGS.put(Skeleton.class, new ModIdentifier("skeleton")); + ENTITY_CLASS_MAPPINGS.put(SkeletonHorse.class, new ModIdentifier("skeleton_horse")); + ENTITY_CLASS_MAPPINGS.put(Slime.class, new ModIdentifier("slime")); + ENTITY_CLASS_MAPPINGS.put(SmallFireball.class, new ModIdentifier("small_fireball")); + ENTITY_CLASS_MAPPINGS.put(SnowGolem.class, new ModIdentifier("snow_golem")); + ENTITY_CLASS_MAPPINGS.put(ThrownSnowball.class, new ModIdentifier("snowball")); + ENTITY_CLASS_MAPPINGS.put(SpectralArrow.class, new ModIdentifier("spectral_arrow")); + ENTITY_CLASS_MAPPINGS.put(Spider.class, new ModIdentifier("spider")); + ENTITY_CLASS_MAPPINGS.put(Squid.class, new ModIdentifier("squid")); + ENTITY_CLASS_MAPPINGS.put(Stray.class, new ModIdentifier("stray")); + ENTITY_CLASS_MAPPINGS.put(Strider.class, new ModIdentifier("strider")); + ENTITY_CLASS_MAPPINGS.put(ThrownEgg.class, new ModIdentifier("egg")); + ENTITY_CLASS_MAPPINGS.put(ThrownEnderPearl.class, new ModIdentifier("ender_pearl")); + ENTITY_CLASS_MAPPINGS.put(ThrownExperienceBottle.class, new ModIdentifier("experience_bottle")); + ENTITY_CLASS_MAPPINGS.put(ThrownPotion.class, new ModIdentifier("potion")); + ENTITY_CLASS_MAPPINGS.put(ThrownTrident.class, new ModIdentifier("trident")); + ENTITY_CLASS_MAPPINGS.put(TraderLlama.class, new ModIdentifier("trader_llama")); + ENTITY_CLASS_MAPPINGS.put(TropicalFish.class, new ModIdentifier("tropical_fish")); + ENTITY_CLASS_MAPPINGS.put(Turtle.class, new ModIdentifier("turtle")); + ENTITY_CLASS_MAPPINGS.put(Vex.class, new ModIdentifier("vex")); + ENTITY_CLASS_MAPPINGS.put(Villager.class, new ModIdentifier("villager")); + ENTITY_CLASS_MAPPINGS.put(Vindicator.class, new ModIdentifier("vindicator")); + ENTITY_CLASS_MAPPINGS.put(WanderingTrader.class, new ModIdentifier("wandering_trader")); + ENTITY_CLASS_MAPPINGS.put(Witch.class, new ModIdentifier("witch")); + ENTITY_CLASS_MAPPINGS.put(WitherBoss.class, new ModIdentifier("wither")); + ENTITY_CLASS_MAPPINGS.put(WitherSkeleton.class, new ModIdentifier("wither_skeleton")); + ENTITY_CLASS_MAPPINGS.put(WitherSkull.class, new ModIdentifier("wither_skull")); + ENTITY_CLASS_MAPPINGS.put(Wolf.class, new ModIdentifier("wolf")); + ENTITY_CLASS_MAPPINGS.put(Zoglin.class, new ModIdentifier("zoglin")); + ENTITY_CLASS_MAPPINGS.put(Zombie.class, new ModIdentifier("zombie")); + ENTITY_CLASS_MAPPINGS.put(ZombieHorse.class, new ModIdentifier("zombie_horse")); + ENTITY_CLASS_MAPPINGS.put(ZombieVillager.class, new ModIdentifier("zombie_villager")); + ENTITY_CLASS_MAPPINGS.put(ZombifiedPiglin.class, new ModIdentifier("zombified_piglin")); + ENTITY_CLASS_MAPPINGS.put(PlayerEntity.class, new ModIdentifier("player")); + ENTITY_CLASS_MAPPINGS.put(FishingHook.class, new ModIdentifier("fishing_bobber")); } public static Class getByIdentifier(String mod, String identifier) { - return ENTITY_CLASS_MAPPINGS.inverse().get(new Pair<>(mod, identifier)); + return ENTITY_CLASS_MAPPINGS.inverse().get(new ModIdentifier(mod, identifier)); } } diff --git a/src/main/java/de/bixilon/minosoft/data/IdentifierSet.java b/src/main/java/de/bixilon/minosoft/data/IdentifierSet.java index 390d03f30..1fcd83cc9 100644 --- a/src/main/java/de/bixilon/minosoft/data/IdentifierSet.java +++ b/src/main/java/de/bixilon/minosoft/data/IdentifierSet.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data; public class IdentifierSet extends MapSet { + public IdentifierSet(Integer key, String value) { super(key, value); } diff --git a/src/main/java/de/bixilon/minosoft/data/PlayerPropertyData.java b/src/main/java/de/bixilon/minosoft/data/PlayerPropertyData.java index 9ce77b188..26944f4d2 100644 --- a/src/main/java/de/bixilon/minosoft/data/PlayerPropertyData.java +++ b/src/main/java/de/bixilon/minosoft/data/PlayerPropertyData.java @@ -28,11 +28,16 @@ public class PlayerPropertyData { return this.name; } + public String getValue() { + return value; + } + public String getSignature() { return signature; } - public String getValue() { - return value; + @Override + public String toString() { + return String.format("%s=%s", getName(), getValue()); } } diff --git a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java index 4edd558a7..8000b02a9 100644 --- a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java +++ b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.config.ConfigurationPaths; import de.bixilon.minosoft.config.StaticConfiguration; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.logging.LogLevels; +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; import de.bixilon.minosoft.util.CountUpAndDownLatch; import de.bixilon.minosoft.util.HTTP; import de.bixilon.minosoft.util.Util; @@ -75,7 +76,7 @@ public class AssetsManager { } try { downloadAssetsIndex(); - } catch (IOException e) { + } catch (Exception e) { Log.printException(e, LogLevels.DEBUG); Log.warn("Could not download assets index. Please check your internet connection"); } @@ -99,7 +100,7 @@ public class AssetsManager { assets.keySet().parallelStream().forEach((filename) -> { try { String hash = assets.get(filename); - boolean compressed = source == AssetsSource.MOJANG; + boolean compressed = (source == AssetsSource.MOJANG); if (!verifyAssetHash(hash, compressed)) { AssetsManager.downloadAsset(source, hash); } @@ -272,9 +273,9 @@ public class AssetsManager { throw new RuntimeException(e); } - byte[] buffer = new byte[4096]; + byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; int length; - while ((length = data.read(buffer, 0, 4096)) != -1) { + while ((length = data.read(buffer, 0, buffer.length)) != -1) { crypt.update(buffer, 0, length); out.write(buffer, 0, length); } @@ -308,6 +309,6 @@ public class AssetsManager { if (hash == null) { throw new FileNotFoundException("Could not find asset with hash: null"); } - return StaticConfiguration.HOME_DIR + String.format("assets/objects/%s/%s.gz", hash.substring(0, 2), hash); + return StaticConfiguration.HOME_DIRECTORY + String.format("assets/objects/%s/%s.gz", hash.substring(0, 2), hash); } } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java b/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java index 994718c28..f916a5921 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityInformation.java @@ -14,17 +14,14 @@ package de.bixilon.minosoft.data.entities; import com.google.gson.JsonObject; +import de.bixilon.minosoft.data.mappings.ModIdentifier; -public class EntityInformation { - private final String mod; - private final String identifier; - +public class EntityInformation extends ModIdentifier { private final float width; private final float height; public EntityInformation(String mod, String identifier, float width, float height) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.width = width; this.height = height; } @@ -33,14 +30,6 @@ public class EntityInformation { return new EntityInformation(mod, identifier, data.get("width").getAsFloat(), data.get("height").getAsFloat()); } - public String getMod() { - return mod; - } - - public String getIdentifier() { - return identifier; - } - public float getWidth() { return width; } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java index e3a3f324f..9dc854728 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaData.java @@ -199,7 +199,7 @@ public class EntityMetaData { } public boolean getBitMask(EntityMetaDataFields field, int bitMask) { - return BitByte.isBitMask(getInt(field), bitMask); + return BitByte.isBitMask(getByte(field), bitMask); } public Object get(EntityMetaDataFields field) { @@ -231,14 +231,7 @@ public class EntityMetaData { } public int getInt(EntityMetaDataFields field) { - Object object = get(field); - if (object instanceof Integer i) { - return i; - } - if (object instanceof Byte b) { - return b; - } - return 0; + return (int) get(field); } public Short getShort(EntityMetaDataFields field) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java index a3c6aeb14..fb3e55658 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EntityMetaDataFields.java @@ -52,7 +52,7 @@ public enum EntityMetaDataFields { AREA_EFFECT_CLOUD_RADIUS(0.5f), AREA_EFFECT_CLOUD_COLOR(0), AREA_EFFECT_CLOUD_WAITING(false), - AREA_EFFECT_CLOUD_PARTICLE(new ParticleData(new Particle("minecraft", "effect"))), + AREA_EFFECT_CLOUD_PARTICLE(new ParticleData(new Particle("effect"))), ABSTRACT_ARROW_FLAGS((byte) 0), ABSTRACT_ARROW_PIERCE_LEVEL((byte) 0), diff --git a/src/main/java/de/bixilon/minosoft/data/entities/EvokerFangs.java b/src/main/java/de/bixilon/minosoft/data/entities/EvokerFangs.java index d38a51e88..a27fc64d6 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/EvokerFangs.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/EvokerFangs.java @@ -19,6 +19,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class EvokerFangs extends Entity { + public EvokerFangs(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/AreaEffectCloud.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/AreaEffectCloud.java index 73f201be0..8034015c5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/AreaEffectCloud.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/AreaEffectCloud.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class AreaEffectCloud extends Entity { + public AreaEffectCloud(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/EvokerFangs.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/EvokerFangs.java index fe4d1fe60..aad29fe25 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/EvokerFangs.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/EvokerFangs.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class EvokerFangs extends Entity { + public EvokerFangs(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/LightningBolt.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/LightningBolt.java index d6141ec12..f705a296a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/LightningBolt.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/LightningBolt.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class LightningBolt extends Entity { + public LightningBolt(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/UnknownEntityException.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/UnknownEntityException.java index f0c89de84..b6028c51e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/UnknownEntityException.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/UnknownEntityException.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.entities.entities; public class UnknownEntityException extends Exception { + public UnknownEntityException() { } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/ambient/Bat.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/ambient/Bat.java index 262680259..34b8c2593 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/ambient/Bat.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/ambient/Bat.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Bat extends AmbientCreature { + public Bat(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Bee.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Bee.java index 1fa6962e3..4ffb3a66b 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Bee.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Bee.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Bee extends Animal { + public Bee(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cat.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cat.java index 9a262b331..21f58de6e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cat.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cat.java @@ -25,6 +25,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Cat extends TamableAnimal { + public Cat(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Chicken.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Chicken.java index 3c5af7d8f..9baf9a438 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Chicken.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Chicken.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Chicken extends Animal { + public Chicken(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cow.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cow.java index 1d86623a2..d04ea3b9a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cow.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Cow.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Cow extends Animal { + public Cow(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Fox.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Fox.java index e33bb29cc..1a687fa34 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Fox.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Fox.java @@ -23,6 +23,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class Fox extends Animal { + public Fox(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/IronGolem.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/IronGolem.java index 424ccd67c..21a63c4a5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/IronGolem.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/IronGolem.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class IronGolem extends AbstractGolem { + public IronGolem(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Mooshroom.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Mooshroom.java index 55d784127..369df3501 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Mooshroom.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Mooshroom.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Mooshroom extends Cow { + public Mooshroom(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Ocelot.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Ocelot.java index 272ccc917..c1152bb50 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Ocelot.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Ocelot.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Ocelot extends Animal { + public Ocelot(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Panda.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Panda.java index ed1e5dbcd..467910125 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Panda.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Panda.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Panda extends Animal { + public Panda(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Parrot.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Parrot.java index f401c1797..2fd40b63a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Parrot.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Parrot.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Parrot extends ShoulderRidingAnimal { + public Parrot(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Pig.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Pig.java index 7b973efcc..4c3ca1a18 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Pig.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Pig.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Pig extends Animal { + public Pig(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/PolarBear.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/PolarBear.java index c2a9e5776..c10152f24 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/PolarBear.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/PolarBear.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class PolarBear extends Animal { + public PolarBear(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Rabbit.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Rabbit.java index f04af585c..4de82083f 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Rabbit.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Rabbit.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Rabbit extends Animal { + public Rabbit(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Sheep.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Sheep.java index e1ad4e202..a993c6d99 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Sheep.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Sheep.java @@ -24,6 +24,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Sheep extends Animal { + public Sheep(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/ShoulderRidingAnimal.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/ShoulderRidingAnimal.java index 29177a632..1e984cb4a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/ShoulderRidingAnimal.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/ShoulderRidingAnimal.java @@ -21,6 +21,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ShoulderRidingAnimal extends TamableAnimal { + public ShoulderRidingAnimal(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/SnowGolem.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/SnowGolem.java index e40241e6b..845105c6d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/SnowGolem.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/SnowGolem.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class SnowGolem extends AbstractGolem { + public SnowGolem(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Strider.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Strider.java index 9801f6dee..7c9372f7e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Strider.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Strider.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Strider extends Animal { + public Strider(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Turtle.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Turtle.java index 1821cf41f..f5d0f95ae 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Turtle.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Turtle.java @@ -24,6 +24,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class Turtle extends Animal { + public Turtle(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java index 728c964fe..af5599ae4 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/Wolf.java @@ -25,6 +25,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Wolf extends TamableAnimal { + public Wolf(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/hoglin/Hoglin.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/hoglin/Hoglin.java index 5ca0cb71a..e6b2094d2 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/hoglin/Hoglin.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/hoglin/Hoglin.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Hoglin extends Animal { + public Hoglin(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Donkey.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Donkey.java index 8244bd674..d8dae945e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Donkey.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Donkey.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Donkey extends AbstractChestedHorse { + public Donkey(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java index 5fb315161..f30a814d2 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Horse.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Horse extends AbstractHorse { + public Horse(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Llama.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Llama.java index fe3a1ed11..5b6fde513 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Llama.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Llama.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Llama extends AbstractChestedHorse { + public Llama(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Mule.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Mule.java index 3556e75df..2ede9cc44 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Mule.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/Mule.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Mule extends AbstractChestedHorse { + public Mule(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/SkeletonHorse.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/SkeletonHorse.java index b7a7d63d5..2ea9d043b 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/SkeletonHorse.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/SkeletonHorse.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class SkeletonHorse extends AbstractHorse { + public SkeletonHorse(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/TraderLlama.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/TraderLlama.java index 8725d0f7d..8838d39fc 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/TraderLlama.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/TraderLlama.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class TraderLlama extends Llama { + public TraderLlama(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/ZombieHorse.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/ZombieHorse.java index 8d5e54582..67bc330eb 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/ZombieHorse.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/horse/ZombieHorse.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ZombieHorse extends AbstractHorse { + public ZombieHorse(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Cod.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Cod.java index 47d36d1fa..fc6f100ff 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Cod.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Cod.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Cod extends AbstractSchoolingFish { + public Cod(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Dolphin.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Dolphin.java index 70f5184ea..fc74d26ea 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Dolphin.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Dolphin.java @@ -24,6 +24,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class Dolphin extends WaterAnimal { + public Dolphin(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/PufferFish.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/PufferFish.java index 1896892ee..8d1414ac0 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/PufferFish.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/PufferFish.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class PufferFish extends AbstractFish { + public PufferFish(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Salmon.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Salmon.java index 86adef71a..13708131a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Salmon.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Salmon.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Salmon extends AbstractSchoolingFish { + public Salmon(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Squid.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Squid.java index 88c4204e0..746b913b3 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Squid.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/Squid.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Squid extends WaterAnimal { + public Squid(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/TropicalFish.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/TropicalFish.java index 92e6f7fc5..f77d853cd 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/TropicalFish.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/animal/water/TropicalFish.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class TropicalFish extends AbstractSchoolingFish { + public TropicalFish(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EndCrystal.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EndCrystal.java index 0939261e4..f17f8e3c7 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EndCrystal.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EndCrystal.java @@ -25,6 +25,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class EndCrystal extends Entity { + public EndCrystal(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EnderDragon.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EnderDragon.java index c2ed780b7..140317ce1 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EnderDragon.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/enderdragon/EnderDragon.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class EnderDragon extends Mob { + public EnderDragon(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/wither/WitherBoss.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/wither/WitherBoss.java index 7f4e217b0..d29e66e3a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/wither/WitherBoss.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/boss/wither/WitherBoss.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class WitherBoss extends Monster { + public WitherBoss(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ArmorStand.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ArmorStand.java index 05ac8f034..f294de408 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ArmorStand.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ArmorStand.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ArmorStand extends LivingEntity { + public ArmorStand(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java index aa2f50a50..115fd5c4e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/ItemFrame.java @@ -24,6 +24,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class ItemFrame extends HangingEntity { + public ItemFrame(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/LeashFenceKnotEntity.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/LeashFenceKnotEntity.java index b7c91f674..e75b8a9bd 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/LeashFenceKnotEntity.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/LeashFenceKnotEntity.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class LeashFenceKnotEntity extends HangingEntity { + public LeashFenceKnotEntity(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.java index 14197504a..1dc0e54cc 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/decoration/Painting.java @@ -31,7 +31,7 @@ public class Painting extends Entity { public Painting(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); direction = Directions.NORTH; - motive = new Motive("minecraft", "kebab"); + motive = new Motive("kebab"); } public Painting(Connection connection, int entityId, UUID uuid, BlockPosition position, Directions direction, Motive motive) { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/ItemEntity.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/ItemEntity.java index 4424f6393..cbc94aecc 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/ItemEntity.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/ItemEntity.java @@ -25,6 +25,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class ItemEntity extends Entity { + public ItemEntity(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.java index c9ced5213..29a292ab4 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/item/PrimedTNT.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class PrimedTNT extends Entity { + public PrimedTNT(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Blaze.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Blaze.java index f415df5bc..b199cf5ef 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Blaze.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Blaze.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Blaze extends Monster { + public Blaze(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/CaveSpider.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/CaveSpider.java index 732e38116..90470aaa3 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/CaveSpider.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/CaveSpider.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class CaveSpider extends Spider { + public CaveSpider(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Creeper.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Creeper.java index 055dedba7..a01e89b51 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Creeper.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Creeper.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Creeper extends Monster { + public Creeper(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Drowned.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Drowned.java index 623d148ab..c647e932f 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Drowned.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Drowned.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Drowned extends Zombie { + public Drowned(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ElderGuardian.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ElderGuardian.java index 67f940045..d77453519 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ElderGuardian.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ElderGuardian.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ElderGuardian extends Guardian { + public ElderGuardian(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java index cc7833ad7..8d8638aec 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Enderman.java @@ -24,6 +24,7 @@ import javax.annotation.Nullable; import java.util.UUID; public class Enderman extends AbstractSkeleton { + public Enderman(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Endermite.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Endermite.java index 0d8741922..18d3205d0 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Endermite.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Endermite.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Endermite extends Monster { + public Endermite(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Ghast.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Ghast.java index 82e0e103e..25840cb14 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Ghast.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Ghast.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Ghast extends FlyingMob { + public Ghast(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Giant.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Giant.java index 1ee7da5cd..27ca045c4 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Giant.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Giant.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Giant extends Monster { + public Giant(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Guardian.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Guardian.java index c1b38f175..9094a0529 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Guardian.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Guardian.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Guardian extends Monster { + public Guardian(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Husk.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Husk.java index d11966a38..636b83a6d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Husk.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Husk.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Husk extends Zombie { + public Husk(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/MagmaCube.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/MagmaCube.java index 6191e237f..1fad91aea 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/MagmaCube.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/MagmaCube.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MagmaCube extends Slime { + public MagmaCube(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Phantom.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Phantom.java index c32c4e65b..e23c21789 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Phantom.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Phantom.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Phantom extends FlyingMob { + public Phantom(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Silverfish.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Silverfish.java index 64a9d974a..cdeb43f87 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Silverfish.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Silverfish.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Silverfish extends Monster { + public Silverfish(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Skeleton.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Skeleton.java index 194c79b76..d512f50cf 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Skeleton.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Skeleton.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Skeleton extends AbstractSkeleton { + public Skeleton(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Slime.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Slime.java index e12fe9056..e42a55e2d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Slime.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Slime.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Slime extends Mob { + public Slime(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Spider.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Spider.java index 244e3eae4..f77469c49 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Spider.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Spider.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Spider extends Monster { + public Spider(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Stray.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Stray.java index a22efa296..6b6b76344 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Stray.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Stray.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Stray extends AbstractSkeleton { + public Stray(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Vex.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Vex.java index 531b43139..cd23675df 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Vex.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Vex.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Vex extends Monster { + public Vex(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/WitherSkeleton.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/WitherSkeleton.java index 72cf3b9bd..e6f50f342 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/WitherSkeleton.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/WitherSkeleton.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class WitherSkeleton extends AbstractSkeleton { + public WitherSkeleton(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zoglin.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zoglin.java index ec0a172ea..9eca4c1c5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zoglin.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zoglin.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Zoglin extends Monster { + public Zoglin(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zombie.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zombie.java index 68f3c0b96..47861c8a9 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zombie.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/Zombie.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Zombie extends Monster { + public Zombie(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombieVillager.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombieVillager.java index 3c63d0309..57128c0e1 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombieVillager.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombieVillager.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ZombieVillager extends Zombie { + public ZombieVillager(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombifiedPiglin.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombifiedPiglin.java index ca707d584..0de33540d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombifiedPiglin.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/ZombifiedPiglin.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ZombifiedPiglin extends Zombie { + public ZombifiedPiglin(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/Piglin.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/Piglin.java index ed3ca99bd..db5983973 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/Piglin.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/Piglin.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Piglin extends AbstractPiglin { + public Piglin(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/PiglinBrute.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/PiglinBrute.java index 22cac8cb8..de51bb1b3 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/PiglinBrute.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/piglin/PiglinBrute.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class PiglinBrute extends AbstractPiglin { + public PiglinBrute(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Evoker.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Evoker.java index eab0677b4..75e4763c6 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Evoker.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Evoker.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Evoker extends SpellcasterIllager { + public Evoker(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Illusioner.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Illusioner.java index abaa0e1f1..1a99ee91d 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Illusioner.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Illusioner.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Illusioner extends SpellcasterIllager { + public Illusioner(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Pillager.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Pillager.java index d1634ad5f..c87d5e726 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Pillager.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Pillager.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Pillager extends AbstractIllager { + public Pillager(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Ravenger.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Ravenger.java index 10c6ff548..31b4da6b3 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Ravenger.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Ravenger.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Ravenger extends Raider { + public Ravenger(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/SpellcasterIllager.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/SpellcasterIllager.java index ddaf65e3a..2edfdc60c 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/SpellcasterIllager.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/SpellcasterIllager.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class SpellcasterIllager extends AbstractIllager { + public SpellcasterIllager(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Vindicator.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Vindicator.java index 8a944ceaa..600319610 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Vindicator.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Vindicator.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Vindicator extends AbstractIllager { + public Vindicator(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java index 0ef9b5f29..d6d4f3e13 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/monster/raid/Witch.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Witch extends Raider { + public Witch(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/DragonFireball.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/DragonFireball.java index 6a6ecaafa..4f3b4409b 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/DragonFireball.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/DragonFireball.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class DragonFireball extends AbstractHurtingProjectile { + public DragonFireball(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.java index 5e1cee76a..a66c82c29 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/FishingHook.java @@ -22,9 +22,10 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class FishingHook extends Projectile { - public FishingHook(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { - super(connection, entityId, uuid, location, rotation); - } + + public FishingHook(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { + super(connection, entityId, uuid, location, rotation); + } @EntityMetaDataFunction(identifier = "hookedEntityId") public int getHookedEntityId() { diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LargeFireball.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LargeFireball.java index c378eb0f6..16826d6ac 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LargeFireball.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LargeFireball.java @@ -22,7 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class LargeFireball extends Fireball { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "fire_charge")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("fire_charge")); public LargeFireball(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LlamaSpit.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LlamaSpit.java index e16b8b0c2..cca4d14b5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LlamaSpit.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/LlamaSpit.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class LlamaSpit extends Projectile { + public LlamaSpit(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ShulkerBullet.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ShulkerBullet.java index ef98cde24..4cd3987c4 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ShulkerBullet.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ShulkerBullet.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ShulkerBullet extends Projectile { + public ShulkerBullet(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/SmallFireball.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/SmallFireball.java index e8a036b99..daba1255e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/SmallFireball.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/SmallFireball.java @@ -22,7 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class SmallFireball extends Fireball { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "fire_charge")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("fire_charge")); public SmallFireball(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEgg.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEgg.java index a41847073..18dd993d9 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEgg.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEgg.java @@ -22,7 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ThrownEgg extends ThrowableItemProjectile { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "egg")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("egg")); public ThrownEgg(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEnderPearl.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEnderPearl.java index e8f132fb1..9425359b9 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEnderPearl.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEnderPearl.java @@ -22,7 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ThrownEnderPearl extends ThrowableItemProjectile { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "ender_pearl")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("ender_pearl")); public ThrownEnderPearl(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownExperienceBottle.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownExperienceBottle.java index d6e66833e..8da8e3c00 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownExperienceBottle.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownExperienceBottle.java @@ -22,7 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ThrownExperienceBottle extends ThrowableItemProjectile { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "experience_bottle")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("experience_bottle")); public ThrownExperienceBottle(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEyeOfEnder.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEyeOfEnder.java index 7b579d60d..78165c020 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEyeOfEnder.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownEyeOfEnder.java @@ -25,7 +25,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ThrownEyeOfEnder extends Entity { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "ender_eye")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("ender_eye")); public ThrownEyeOfEnder(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownSnowball.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownSnowball.java index 6a8542e25..ffd69b85a 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownSnowball.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownSnowball.java @@ -22,7 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ThrownSnowball extends ThrowableItemProjectile { - private static final Slot DEFAULT_ITEM = new Slot(new Item("minecraft", "snowball")); + private static final Slot DEFAULT_ITEM = new Slot(new Item("snowball")); public ThrownSnowball(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownTrident.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownTrident.java index 3accdce3a..3e15d02da 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownTrident.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/ThrownTrident.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class ThrownTrident extends AbstractArrow { + public ThrownTrident(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/WitherSkull.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/WitherSkull.java index 99bcfdf7f..ee4b99572 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/WitherSkull.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/projectile/WitherSkull.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class WitherSkull extends AbstractHurtingProjectile { + public WitherSkull(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Boat.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Boat.java index 027531217..bc981aeb6 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Boat.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Boat.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Boat extends Entity { + public Boat(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Minecart.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Minecart.java index a17e7d06e..13b624ab1 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Minecart.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/Minecart.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class Minecart extends AbstractMinecart { + public Minecart(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartChest.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartChest.java index 20251c2b7..5e05ce2de 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartChest.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartChest.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MinecartChest extends AbstractMinecart { + public MinecartChest(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartCommandBlock.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartCommandBlock.java index db98a05f9..87eddf675 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartCommandBlock.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartCommandBlock.java @@ -23,6 +23,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MinecartCommandBlock extends AbstractMinecart { + public MinecartCommandBlock(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartFurnace.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartFurnace.java index 615c33a2c..a8c6dfb19 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartFurnace.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartFurnace.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MinecartFurnace extends AbstractMinecartContainer { + public MinecartFurnace(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartHopper.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartHopper.java index b44ba6366..69ed7b065 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartHopper.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartHopper.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MinecartHopper extends AbstractMinecartContainer { + public MinecartHopper(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartSpawner.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartSpawner.java index 7c35859d2..f31d0266e 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartSpawner.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartSpawner.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MinecartSpawner extends AbstractMinecart { + public MinecartSpawner(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartTNT.java b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartTNT.java index 3578bb349..571cfbb31 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartTNT.java +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/vehicle/MinecartTNT.java @@ -20,6 +20,7 @@ import de.bixilon.minosoft.protocol.network.Connection; import java.util.UUID; public class MinecartTNT extends AbstractMinecart { + public MinecartTNT(Connection connection, int entityId, UUID uuid, Location location, EntityRotation rotation) { super(connection, entityId, uuid, location, rotation); } diff --git a/src/main/java/de/bixilon/minosoft/data/inventory/Slot.java b/src/main/java/de/bixilon/minosoft/data/inventory/Slot.java index 480d3d6d5..ec3badbc2 100644 --- a/src/main/java/de/bixilon/minosoft/data/inventory/Slot.java +++ b/src/main/java/de/bixilon/minosoft/data/inventory/Slot.java @@ -17,6 +17,7 @@ import de.bixilon.minosoft.data.mappings.Enchantment; import de.bixilon.minosoft.data.mappings.Item; import de.bixilon.minosoft.data.mappings.versions.VersionMapping; import de.bixilon.minosoft.data.text.ChatComponent; +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; import de.bixilon.minosoft.util.BitByte; import de.bixilon.minosoft.util.nbt.tag.*; @@ -261,7 +262,7 @@ public class Slot { } public String getSkullOwner() { - if (!item.getMod().equals("minecraft") || !item.getIdentifier().equals("skull")) { + if (!item.getMod().equals(ProtocolDefinition.DEFAULT_MOD) || !item.getIdentifier().equals("skull")) { throw new IllegalArgumentException("Item is not a skull!"); } return skullOwner; diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/BlockId.java b/src/main/java/de/bixilon/minosoft/data/mappings/BlockId.java index 560a5b9bf..1c6de83b3 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/BlockId.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/BlockId.java @@ -13,17 +13,13 @@ package de.bixilon.minosoft.data.mappings; -public record BlockId(String mod, String identifier) { - public String getMod() { - return mod; +public class BlockId extends ModIdentifier { + + public BlockId(String mod, String identifier) { + super(mod, identifier); } - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", getMod(), getIdentifier()); + public BlockId(String fullIdentifier) { + super(fullIdentifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.java b/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.java index 21a9398f8..f861f4b89 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/Dimension.java @@ -13,39 +13,18 @@ package de.bixilon.minosoft.data.mappings; -public class Dimension { - final String mod; - final String identifier; +public class Dimension extends ModIdentifier { final boolean hasSkyLight; public Dimension(String mod, String identifier, boolean hasSkyLight) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.hasSkyLight = hasSkyLight; } - public String getMod() { - return mod; - } - - public String getIdentifier() { - return identifier; - } - public boolean hasSkyLight() { return hasSkyLight; } - @Override - public String toString() { - return String.format("%s:%s", getMod(), getIdentifier()); - } - - @Override - public int hashCode() { - return mod.hashCode() * identifier.hashCode(); - } - @Override public boolean equals(Object obj) { if (super.equals(obj)) { diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/Enchantment.java b/src/main/java/de/bixilon/minosoft/data/mappings/Enchantment.java index aea9eb09f..fa6277123 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/Enchantment.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/Enchantment.java @@ -13,17 +13,13 @@ package de.bixilon.minosoft.data.mappings; -public record Enchantment(String mod, String identifier) { - public String getMod() { - return mod; +public class Enchantment extends ModIdentifier { + + public Enchantment(String mod, String identifier) { + super(mod, identifier); } - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", mod, identifier); + public Enchantment(String fullIdentifier) { + super(fullIdentifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/Item.java b/src/main/java/de/bixilon/minosoft/data/mappings/Item.java index 2cafac1a1..2f33fc1b8 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/Item.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/Item.java @@ -13,48 +13,13 @@ package de.bixilon.minosoft.data.mappings; -public class Item { - final String mod; - final String identifier; +public class Item extends ModIdentifier { public Item(String fullIdentifier) { - String[] split = fullIdentifier.split(":"); - this.mod = split[0]; - this.identifier = split[1]; + super(fullIdentifier); } public Item(String mod, String identifier) { - this.mod = mod; - this.identifier = identifier; - } - - public String getMod() { - return mod; - } - - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", getMod(), getIdentifier()); - } - - @Override - public int hashCode() { - return mod.hashCode() * identifier.hashCode(); - } - - @Override - public boolean equals(Object obj) { - if (super.equals(obj)) { - return true; - } - if (hashCode() != obj.hashCode()) { - return false; - } - Item their = (Item) obj; - return getIdentifier().equals(their.getIdentifier()) && getMod().equals(their.getMod()); + super(mod, identifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/MappingsLoadingException.java b/src/main/java/de/bixilon/minosoft/data/mappings/MappingsLoadingException.java index a67f054a8..5336cc078 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/MappingsLoadingException.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/MappingsLoadingException.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.data.mappings; public class MappingsLoadingException extends Exception { + public MappingsLoadingException() { } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/MobEffect.java b/src/main/java/de/bixilon/minosoft/data/mappings/MobEffect.java index cef85b16b..a70ca38ad 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/MobEffect.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/MobEffect.java @@ -13,17 +13,13 @@ package de.bixilon.minosoft.data.mappings; -public record MobEffect(String mod, String identifier) { - public String getMod() { - return mod; +public class MobEffect extends ModIdentifier { + + public MobEffect(String mod, String identifier) { + super(mod, identifier); } - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", getMod(), getIdentifier()); + public MobEffect(String fullIdentifier) { + super(fullIdentifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/ModIdentifier.java b/src/main/java/de/bixilon/minosoft/data/mappings/ModIdentifier.java new file mode 100644 index 000000000..b942888b9 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/mappings/ModIdentifier.java @@ -0,0 +1,67 @@ +/* + * 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.data.mappings; + +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; + +public class ModIdentifier { + protected final String mod; + protected final String identifier; + + public ModIdentifier(String mod, String identifier) { + this.mod = mod; + this.identifier = identifier; + } + + public ModIdentifier(String fullIdentifier) { + String[] split = fullIdentifier.split(":"); + if (split.length == 1) { + this.mod = ProtocolDefinition.DEFAULT_MOD; + this.identifier = fullIdentifier; + return; + } + this.mod = split[0]; + this.identifier = split[1]; + } + + public String getMod() { + return mod; + } + + public String getIdentifier() { + return identifier; + } + + @Override + public String toString() { + return String.format("%s:%s", mod, identifier); + } + + @Override + public int hashCode() { + return mod.hashCode() * identifier.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (super.equals(obj)) { + return true; + } + if (hashCode() != obj.hashCode()) { + return false; + } + Item their = (Item) obj; + return getIdentifier().equals(their.getIdentifier()) && getMod().equals(their.getMod()); + } +} diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/Motive.java b/src/main/java/de/bixilon/minosoft/data/mappings/Motive.java index d387caea5..84915efe7 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/Motive.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/Motive.java @@ -13,17 +13,13 @@ package de.bixilon.minosoft.data.mappings; -public record Motive(String mod, String identifier) { - public String getMod() { - return mod; +public class Motive extends ModIdentifier { + + public Motive(String mod, String identifier) { + super(mod, identifier); } - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", getMod(), getIdentifier()); + public Motive(String fullIdentifier) { + super(fullIdentifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.java b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.java index 3240f3c45..374f6f164 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Block.java @@ -15,47 +15,47 @@ package de.bixilon.minosoft.data.mappings.blocks; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import de.bixilon.minosoft.data.mappings.ModIdentifier; import java.util.HashSet; import java.util.Map; -public class Block { - final String mod; - final String identifier; +public class Block extends ModIdentifier { final BlockRotations rotation; final HashSet properties; public Block(String mod, String identifier, HashSet properties, BlockRotations rotation) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.properties = properties; this.rotation = rotation; } public Block(String mod, String identifier, HashSet properties) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.properties = properties; this.rotation = BlockRotations.NONE; } public Block(String mod, String identifier, BlockRotations rotation) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.properties = new HashSet<>(); this.rotation = rotation; } public Block(String mod, String identifier) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); + this.properties = new HashSet<>(); + this.rotation = BlockRotations.NONE; + } + + public Block(String fullIdentifier) { + super(fullIdentifier); this.properties = new HashSet<>(); this.rotation = BlockRotations.NONE; } public Block(String mod, String identifier, JsonObject properties) { - this.mod = mod; - this.identifier = identifier; + super(mod, identifier); this.properties = new HashSet<>(); BlockRotations rotation = BlockRotations.NONE; for (Map.Entry property : properties.entrySet()) { @@ -120,13 +120,15 @@ public class Block { @Override public boolean equals(Object obj) { - if (super.equals(obj)) { + if (this == obj) { return true; } if (hashCode() != obj.hashCode()) { return false; } - Block their = (Block) obj; + if (!(obj instanceof Block their)) { + return false; + } return getIdentifier().equals(their.getIdentifier()) && getRotation() == their.getRotation() && getProperties().equals(their.getProperties()) && getMod().equals(their.getMod()); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Blocks.java b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Blocks.java index 07ae291de..011feefd7 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Blocks.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/blocks/Blocks.java @@ -20,7 +20,7 @@ import com.google.gson.JsonObject; import java.util.HashSet; public class Blocks { - public static final Block nullBlock = new Block("minecraft", "air"); + public static final Block nullBlock = new Block("air"); public static HashBiMap load(String mod, JsonObject json, boolean metaData) { HashBiMap versionMapping = HashBiMap.create(); diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/particle/Particle.java b/src/main/java/de/bixilon/minosoft/data/mappings/particle/Particle.java index 0c8add7da..2e52e47a4 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/particle/Particle.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/particle/Particle.java @@ -13,17 +13,15 @@ package de.bixilon.minosoft.data.mappings.particle; -public record Particle(String mod, String identifier) { - public String getMod() { - return mod; +import de.bixilon.minosoft.data.mappings.ModIdentifier; + +public class Particle extends ModIdentifier { + + public Particle(String mod, String identifier) { + super(mod, identifier); } - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", mod, identifier); + public Particle(String fullIdentifier) { + super(fullIdentifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/recipes/Ingredient.java b/src/main/java/de/bixilon/minosoft/data/mappings/recipes/Ingredient.java index 916ba9942..dd7410fc4 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/recipes/Ingredient.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/recipes/Ingredient.java @@ -15,18 +15,7 @@ package de.bixilon.minosoft.data.mappings.recipes; import de.bixilon.minosoft.data.inventory.Slot; -import java.util.Arrays; -import java.util.HashSet; - public record Ingredient(Slot[] slot) { - public static boolean slotEquals(Slot[] one, Slot[] two) { - if (one.length != two.length) { - return false; - } - HashSet first = new HashSet<>(Arrays.asList(one)); - HashSet second = new HashSet<>(Arrays.asList(two)); - return first.equals(second); - } public Slot[] getSlot() { return slot; diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/statistics/Statistic.java b/src/main/java/de/bixilon/minosoft/data/mappings/statistics/Statistic.java index 8ae2c19cd..a48411ae8 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/statistics/Statistic.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/statistics/Statistic.java @@ -13,17 +13,15 @@ package de.bixilon.minosoft.data.mappings.statistics; -public record Statistic(String mod, String identifier) { - public String getMod() { - return mod; +import de.bixilon.minosoft.data.mappings.ModIdentifier; + +public class Statistic extends ModIdentifier { + + public Statistic(String mod, String identifier) { + super(mod, identifier); } - public String getIdentifier() { - return identifier; - } - - @Override - public String toString() { - return String.format("%s:%s", mod, identifier); + public Statistic(String fullIdentifier) { + super(fullIdentifier); } } diff --git a/src/main/java/de/bixilon/minosoft/data/mappings/versions/VersionMapping.java b/src/main/java/de/bixilon/minosoft/data/mappings/versions/VersionMapping.java index c553cc254..cc117e7ea 100644 --- a/src/main/java/de/bixilon/minosoft/data/mappings/versions/VersionMapping.java +++ b/src/main/java/de/bixilon/minosoft/data/mappings/versions/VersionMapping.java @@ -490,10 +490,19 @@ public class VersionMapping { } // meta data index if (data.has("data")) { - JsonArray metaDataJson = data.getAsJsonArray("data"); - for (JsonElement jsonElement : metaDataJson) { - String field = jsonElement.getAsString(); - entityMetaIndexMap.put(EntityMetaDataFields.valueOf(field), metaDataIndexOffset++); + JsonElement metaDataJson = data.get("data"); + if (metaDataJson instanceof JsonArray metaDataJsonArray) { + for (JsonElement jsonElement : metaDataJsonArray) { + String field = jsonElement.getAsString(); + entityMetaIndexMap.put(EntityMetaDataFields.valueOf(field), metaDataIndexOffset++); + } + } else if (metaDataJson instanceof JsonObject metaDataJsonObject) { + for (String key : metaDataJsonObject.keySet()) { + entityMetaIndexMap.put(EntityMetaDataFields.valueOf(key), metaDataJsonObject.get(key).getAsInt()); + metaDataIndexOffset++; + } + } else { + throw new RuntimeException("entities.json is invalid"); } } entityMetaIndexOffsetParentMapping.put(identifier, new Pair<>(parent, metaDataIndexOffset)); 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 629dab14b..667fa956c 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 @@ -136,7 +136,7 @@ public class Versions { data = files.get(mapping.getFilename() + ".json"); } if (data == null) { - loadVersionMappings(mapping, "minecraft", data, version); + loadVersionMappings(mapping, ProtocolDefinition.DEFAULT_MOD, data, version); continue; } for (String mod : data.keySet()) { diff --git a/src/main/java/de/bixilon/minosoft/data/world/Chunk.java b/src/main/java/de/bixilon/minosoft/data/world/Chunk.java index 90dcd11eb..ed5b1460e 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/Chunk.java +++ b/src/main/java/de/bixilon/minosoft/data/world/Chunk.java @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.world; +import de.bixilon.minosoft.data.entities.block.BlockEntityMetaData; import de.bixilon.minosoft.data.mappings.blocks.Block; import de.bixilon.minosoft.data.mappings.blocks.Blocks; import de.bixilon.minosoft.render.blockModels.Face.RenderConstants; @@ -67,4 +68,25 @@ public class Chunk { public ConcurrentHashMap getSections() { return sections; } + + + public void setBlockEntityData(InChunkLocation position, BlockEntityMetaData data) { + ChunkSection section = sections.get((byte) (position.getY() / 16)); + if (section == null) { + return; + } + section.setBlockEntityData(position.getInChunkSectionLocation(), data); + } + + public BlockEntityMetaData getBlockEntityData(InChunkLocation position) { + ChunkSection section = sections.get((byte) (position.getY() / 16)); + if (section == null) { + return null; + } + return section.getBlockEntityData(position.getInChunkSectionLocation()); + } + + public void setBlockEntityData(HashMap blockEntities) { + blockEntities.forEach(this::setBlockEntityData); + } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.java b/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.java index ea1ce909b..a04d5c255 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.java +++ b/src/main/java/de/bixilon/minosoft/data/world/ChunkSection.java @@ -13,6 +13,7 @@ package de.bixilon.minosoft.data.world; +import de.bixilon.minosoft.data.entities.block.BlockEntityMetaData; import de.bixilon.minosoft.data.mappings.blocks.Block; import de.bixilon.minosoft.data.mappings.blocks.Blocks; @@ -22,14 +23,23 @@ import java.util.concurrent.ConcurrentHashMap; * Collection of 16x16x16 blocks */ public class ChunkSection { - final ConcurrentHashMap blocks; + private final ConcurrentHashMap blocks; + private final ConcurrentHashMap blockEntityMeta = new ConcurrentHashMap<>(); + private final ConcurrentHashMap light; + private final ConcurrentHashMap skyLight; public ChunkSection(ConcurrentHashMap blocks) { + this(blocks, new ConcurrentHashMap<>(), new ConcurrentHashMap<>()); + } + + public ChunkSection(ConcurrentHashMap blocks, ConcurrentHashMap light, ConcurrentHashMap skyLight) { this.blocks = blocks; + this.light = light; + this.skyLight = skyLight; } public ChunkSection() { - this.blocks = new ConcurrentHashMap<>(); + this(new ConcurrentHashMap<>()); } public Block getBlock(int x, int y, int z) { @@ -45,14 +55,43 @@ public class ChunkSection { } public void setBlock(InChunkSectionLocation location, Block block) { + if (blocks.get(location).equals(block)) { + return; + } if (block == null || block.equals(Blocks.nullBlock)) { blocks.remove(location); return; } blocks.put(location, block); + blockEntityMeta.remove(location); + } + + public void setBlockEntityData(InChunkSectionLocation position, BlockEntityMetaData data) { + // ToDo check if block is really a block entity (command block, spawner, skull, flower pot) + blockEntityMeta.put(position, data); } public ConcurrentHashMap getBlocks() { return blocks; } + + public ConcurrentHashMap getBlockEntityMeta() { + return blockEntityMeta; + } + + public ConcurrentHashMap getLight() { + return light; + } + + public ConcurrentHashMap getSkyLight() { + return skyLight; + } + + public BlockEntityMetaData getBlockEntityData(InChunkSectionLocation position) { + return blockEntityMeta.get(position); + } + + public void setBlockEntityData(ConcurrentHashMap blockEntities) { + blockEntities.forEach(blockEntityMeta::put); + } } diff --git a/src/main/java/de/bixilon/minosoft/data/world/World.java b/src/main/java/de/bixilon/minosoft/data/world/World.java index a6cef1705..490f07f7e 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/World.java +++ b/src/main/java/de/bixilon/minosoft/data/world/World.java @@ -28,7 +28,6 @@ import java.util.concurrent.ConcurrentHashMap; public class World { final ConcurrentHashMap chunks = new ConcurrentHashMap<>(); final ConcurrentHashMap entities = new ConcurrentHashMap<>(); - final HashMap blockEntityMeta = new HashMap<>(); boolean hardcore; boolean raining; Dimension dimension; // used for sky color, etc @@ -109,16 +108,23 @@ public class World { } public void setBlockEntityData(BlockPosition position, BlockEntityMetaData data) { - // ToDo check if block is really a block entity (command block, spawner, skull, flower pot) - blockEntityMeta.put(position, data); + Chunk chunk = chunks.get(position.getChunkLocation()); + if (chunk == null) { + return; + } + chunk.setBlockEntityData(position.getInChunkLocation(), data); } public BlockEntityMetaData getBlockEntityData(BlockPosition position) { - return blockEntityMeta.get(position); + Chunk chunk = chunks.get(position.getChunkLocation()); + if (chunk == null) { + return null; + } + return chunk.getBlockEntityData(position.getInChunkLocation()); } public void setBlockEntityData(HashMap blockEntities) { - blockEntities.forEach(blockEntityMeta::put); + blockEntities.forEach(this::setBlockEntityData); } public Chunk getChunk(ChunkLocation chunkLocation) { 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 868d0a795..c0b30efc5 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/ServerListCell.java @@ -20,6 +20,9 @@ import de.bixilon.minosoft.data.locale.Strings; 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.modding.event.EventInvokerCallback; +import de.bixilon.minosoft.modding.event.events.ConnectionStateChangeEvent; +import de.bixilon.minosoft.modding.event.events.ServerListPingArriveEvent; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.ping.ForgeModInfo; import de.bixilon.minosoft.protocol.ping.ServerListPing; @@ -134,7 +137,8 @@ public class ServerListCell extends ListCell implements Initializable { if (server.getLastPing() == null) { server.ping(); } - server.getLastPing().addPingCallback(ping -> Platform.runLater(() -> { + server.getLastPing().registerEvent(new EventInvokerCallback(ServerListPingArriveEvent.class, event -> Platform.runLater(() -> { + ServerListPing ping = event.getServerListPing(); if (server != this.server) { // cell does not contains us anymore return; @@ -193,7 +197,7 @@ public class ServerListCell extends ListCell implements Initializable { canConnect = false; setErrorMotd(String.format("%s: %s", server.getLastPing().getLastConnectionException().getClass().getCanonicalName(), server.getLastPing().getLastConnectionException().getLocalizedMessage())); } - })); + }))); } private void resetCell() { @@ -265,7 +269,7 @@ public class ServerListCell extends ListCell implements Initializable { } optionsConnect.setDisable(true); connection.connect(server.getLastPing().getAddress(), version); - connection.addConnectionChangeCallback(this::handleConnectionCallback); + connection.registerEvent(new EventInvokerCallback<>(this::handleConnectionCallback)); server.addConnection(connection); } @@ -334,7 +338,8 @@ public class ServerListCell extends ListCell implements Initializable { dialog.showAndWait(); } - private void handleConnectionCallback(Connection connection) { + private void handleConnectionCallback(ConnectionStateChangeEvent event) { + Connection connection = event.getConnection(); if (!server.getConnections().contains(connection)) { // the card got recycled return; diff --git a/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java b/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java index 3ace14379..c9d997d3a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/SessionListCell.java @@ -15,6 +15,8 @@ package de.bixilon.minosoft.gui.main; import de.bixilon.minosoft.data.locale.LocaleManager; import de.bixilon.minosoft.data.locale.Strings; +import de.bixilon.minosoft.modding.event.EventInvokerCallback; +import de.bixilon.minosoft.modding.event.events.ConnectionStateChangeEvent; import de.bixilon.minosoft.protocol.network.Connection; import javafx.application.Platform; import javafx.fxml.FXMLLoader; @@ -81,12 +83,13 @@ public class SessionListCell extends ListCell implements Initializab } setStyle(null); this.connection = connection; - connection.addConnectionChangeCallback(this::handleConnectionCallback); + connection.registerEvent(new EventInvokerCallback<>(this::handleConnectionCallback)); connectionId.setText(String.format("#%d", connection.getConnectionId())); account.setText(connection.getPlayer().getAccount().getPlayerName()); } - private void handleConnectionCallback(Connection connection) { + private void handleConnectionCallback(ConnectionStateChangeEvent event) { + Connection connection = event.getConnection(); if (this.connection != connection) { // the card got recycled return; diff --git a/src/main/java/de/bixilon/minosoft/modding/event/EventInvoker.java b/src/main/java/de/bixilon/minosoft/modding/event/EventInvoker.java new file mode 100644 index 000000000..0c8de01c0 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/modding/event/EventInvoker.java @@ -0,0 +1,41 @@ +/* + * 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; + +import de.bixilon.minosoft.modding.event.events.ConnectionEvent; +import de.bixilon.minosoft.modding.loading.Priorities; + +public abstract class EventInvoker { + protected final EventListener listener; + protected final boolean ignoreCancelled; + protected final Priorities priority; + + public EventInvoker(boolean ignoreCancelled, Priorities priority, EventListener listener) { + this.ignoreCancelled = ignoreCancelled; + this.listener = listener; + this.priority = priority; + } + + public boolean isIgnoreCancelled() { + return ignoreCancelled; + } + + public Priorities getPriority() { + return priority; + } + + public abstract void invoke(ConnectionEvent event); + + public abstract Class getEventType(); +} diff --git a/src/main/java/de/bixilon/minosoft/modding/event/EventInvokerCallback.java b/src/main/java/de/bixilon/minosoft/modding/event/EventInvokerCallback.java new file mode 100644 index 000000000..7dd95d41a --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/modding/event/EventInvokerCallback.java @@ -0,0 +1,54 @@ +/* + * 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; + +import de.bixilon.minosoft.modding.event.events.ConnectionEvent; +import de.bixilon.minosoft.modding.loading.Priorities; + +public class EventInvokerCallback extends EventInvoker { + private final InvokerCallback callback; + + Class eventType = ConnectionEvent.class; + + public EventInvokerCallback(boolean ignoreCancelled, InvokerCallback callback) { + super(ignoreCancelled, Priorities.NORMAL, null); + this.callback = callback; + } + + + // if you need instant fireing support + public EventInvokerCallback(Class eventType, InvokerCallback callback) { + this(false, callback); + this.eventType = eventType; // ToDo: how to get the class of V? seems to be impossible + } + + public EventInvokerCallback(InvokerCallback callback) { + this(false, callback); + } + + public void invoke(ConnectionEvent event) { + if (eventType != event.getClass()) { + return; + } + callback.handle((V) event); + } + + public Class getEventType() { + return eventType; + } + + public interface InvokerCallback { + void handle(V event); + } +} diff --git a/src/main/java/de/bixilon/minosoft/modding/event/EventMethod.java b/src/main/java/de/bixilon/minosoft/modding/event/EventInvokerMethod.java similarity index 66% rename from src/main/java/de/bixilon/minosoft/modding/event/EventMethod.java rename to src/main/java/de/bixilon/minosoft/modding/event/EventInvokerMethod.java index 5d72c83d1..459e47431 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/EventMethod.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/EventInvokerMethod.java @@ -16,23 +16,23 @@ package de.bixilon.minosoft.modding.event; import de.bixilon.minosoft.modding.event.events.CancelableEvent; import de.bixilon.minosoft.modding.event.events.ConnectionEvent; import de.bixilon.minosoft.modding.event.events.annotations.EventHandler; +import de.bixilon.minosoft.modding.loading.Priorities; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -public class EventMethod { - private final EventHandler annotation; - private final EventListener listener; +public class EventInvokerMethod extends EventInvoker { private final Method method; + private final Class eventType; - public EventMethod(EventHandler annotation, EventListener listener, Method method) { - this.annotation = annotation; - this.listener = listener; + public EventInvokerMethod(boolean ignoreCancelled, Priorities priority, EventListener listener, Method method) { + super(ignoreCancelled, priority, listener); this.method = method; + eventType = (Class) method.getParameters()[0].getType(); } - public EventHandler getAnnotation() { - return annotation; + public EventInvokerMethod(EventHandler annotation, EventListener listener, Method method) { + this(annotation.ignoreCancelled(), annotation.priority(), listener, method); } public Method getMethod() { @@ -43,7 +43,7 @@ public class EventMethod { if (!method.getParameters()[0].getType().isAssignableFrom(event.getClass())) { return; } - if (!annotation.ignoreCancelled() && event instanceof CancelableEvent cancelableEvent && cancelableEvent.isCancelled()) { + if (!ignoreCancelled && event instanceof CancelableEvent cancelableEvent && cancelableEvent.isCancelled()) { return; } try { @@ -52,4 +52,8 @@ public class EventMethod { e.printStackTrace(); } } + + public Class getEventType() { + return eventType; + } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/EventManager.java b/src/main/java/de/bixilon/minosoft/modding/event/EventManager.java index a2abeba77..9fbfebebf 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/EventManager.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/EventManager.java @@ -23,16 +23,16 @@ import java.util.HashMap; import java.util.HashSet; public class EventManager { - private final HashSet globalEventListeners = new HashSet<>(); - private final HashMap, HashSet> specificEventListeners = new HashMap<>(); + private final HashSet globalEventListeners = new HashSet<>(); + private final HashMap, HashSet> specificEventListeners = new HashMap<>(); public void registerGlobalListener(EventListener listener) { globalEventListeners.addAll(getEventMethods(listener)); } - private HashSet getEventMethods(EventListener listener) { + private HashSet getEventMethods(EventListener listener) { Class clazz = listener.getClass(); - HashSet eventMethods = new HashSet<>(); + HashSet eventInvokers = new HashSet<>(); for (Method method : clazz.getMethods()) { EventHandler annotation = method.getAnnotation(EventHandler.class); if (annotation == null) { @@ -44,12 +44,12 @@ public class EventManager { if (!ConnectionEvent.class.isAssignableFrom(method.getParameters()[0].getType())) { continue; } - eventMethods.add(new EventMethod(annotation, listener, method)); + eventInvokers.add(new EventInvokerMethod(annotation, listener, method)); } - return eventMethods; + return eventInvokers; } - public HashSet getGlobalEventListeners() { + public HashSet getGlobalEventListeners() { return globalEventListeners; } @@ -61,7 +61,7 @@ public class EventManager { specificEventListeners.put(serverAddresses, getEventMethods(listener)); } - public HashMap, HashSet> getSpecificEventListeners() { + public HashMap, HashSet> getSpecificEventListeners() { return specificEventListeners; } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/ConnectionStateChangeEvent.java b/src/main/java/de/bixilon/minosoft/modding/event/events/ConnectionStateChangeEvent.java new file mode 100644 index 000000000..6bb8ef047 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/ConnectionStateChangeEvent.java @@ -0,0 +1,41 @@ +/* + * 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.modding.event.events.annotations.Unsafe; +import de.bixilon.minosoft.protocol.network.Connection; +import de.bixilon.minosoft.protocol.protocol.ConnectionStates; + +/** + * Fired when the connection state was just changed + */ +@Unsafe +public class ConnectionStateChangeEvent extends ConnectionEvent { + private final ConnectionStates previousState; + private final ConnectionStates currentState; + + public ConnectionStateChangeEvent(Connection connection, ConnectionStates previousState, ConnectionStates currentState) { + super(connection); + this.previousState = previousState; + this.currentState = currentState; + } + + public ConnectionStates getPreviousState() { + return previousState; + } + + public ConnectionStates getCurrentState() { + return currentState; + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/main/ConnectionChangeCallback.java b/src/main/java/de/bixilon/minosoft/modding/event/events/ServerListPingArriveEvent.java similarity index 56% rename from src/main/java/de/bixilon/minosoft/gui/main/ConnectionChangeCallback.java rename to src/main/java/de/bixilon/minosoft/modding/event/events/ServerListPingArriveEvent.java index 2442a2483..be8095f6e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/ConnectionChangeCallback.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/ServerListPingArriveEvent.java @@ -11,10 +11,26 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.gui.main; +package de.bixilon.minosoft.modding.event.events; import de.bixilon.minosoft.protocol.network.Connection; +import de.bixilon.minosoft.protocol.ping.ServerListPing; -public interface ConnectionChangeCallback { - void handle(Connection connection); +import javax.annotation.Nullable; + +/** + * Fired when a ping arrives from the server or the ping already arrived and the event got registered to late + */ +public class ServerListPingArriveEvent extends ConnectionEvent { + private final ServerListPing serverListPing; + + public ServerListPingArriveEvent(Connection connection, ServerListPing serverListPing) { + super(connection); + this.serverListPing = serverListPing; + } + + @Nullable + public ServerListPing getServerListPing() { + return serverListPing; + } } diff --git a/src/main/java/de/bixilon/minosoft/modding/event/events/annotations/Unsafe.java b/src/main/java/de/bixilon/minosoft/modding/event/events/annotations/Unsafe.java index bd3ce413a..7b38bf237 100644 --- a/src/main/java/de/bixilon/minosoft/modding/event/events/annotations/Unsafe.java +++ b/src/main/java/de/bixilon/minosoft/modding/event/events/annotations/Unsafe.java @@ -13,5 +13,9 @@ package de.bixilon.minosoft.modding.event.events.annotations; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(RetentionPolicy.RUNTIME) public @interface Unsafe { } diff --git a/src/main/java/de/bixilon/minosoft/modding/loading/ModLoader.java b/src/main/java/de/bixilon/minosoft/modding/loading/ModLoader.java index 42ac4afa0..eb12dd05f 100644 --- a/src/main/java/de/bixilon/minosoft/modding/loading/ModLoader.java +++ b/src/main/java/de/bixilon/minosoft/modding/loading/ModLoader.java @@ -41,7 +41,7 @@ public class ModLoader { // load all jars, parse the mod.json // sort the list and prioritize // load all lists and dependencies async - File[] files = new File(StaticConfiguration.HOME_DIR + "mods").listFiles(); + File[] files = new File(StaticConfiguration.HOME_DIRECTORY + "mods").listFiles(); if (files == null) { // no mods to load return; diff --git a/src/main/java/de/bixilon/minosoft/modding/loading/ModLoadingException.java b/src/main/java/de/bixilon/minosoft/modding/loading/ModLoadingException.java index c056e5a93..f90349e9b 100644 --- a/src/main/java/de/bixilon/minosoft/modding/loading/ModLoadingException.java +++ b/src/main/java/de/bixilon/minosoft/modding/loading/ModLoadingException.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.modding.loading; public class ModLoadingException extends Exception { + public ModLoadingException() { } 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 936b4a19c..32529848a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java +++ b/src/main/java/de/bixilon/minosoft/protocol/network/Connection.java @@ -21,21 +21,16 @@ import de.bixilon.minosoft.data.mappings.recipes.Recipes; import de.bixilon.minosoft.data.mappings.versions.Version; import de.bixilon.minosoft.data.mappings.versions.VersionMapping; import de.bixilon.minosoft.data.mappings.versions.Versions; -import de.bixilon.minosoft.gui.main.ConnectionChangeCallback; import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.logging.LogLevels; -import de.bixilon.minosoft.modding.event.EventMethod; -import de.bixilon.minosoft.modding.event.events.CancelableEvent; -import de.bixilon.minosoft.modding.event.events.ConnectionEvent; -import de.bixilon.minosoft.modding.event.events.PacketReceiveEvent; -import de.bixilon.minosoft.modding.event.events.PacketSendEvent; +import de.bixilon.minosoft.modding.event.EventInvoker; +import de.bixilon.minosoft.modding.event.events.*; 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.render.GameWindow; @@ -45,7 +40,6 @@ import de.bixilon.minosoft.util.ServerAddress; import org.xbill.DNS.TextParseException; import javax.annotation.Nullable; -import java.util.HashSet; import java.util.LinkedList; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicBoolean; @@ -57,14 +51,11 @@ public class Connection { private final PacketSender sender = new PacketSender(this); private final LinkedBlockingQueue handlingQueue = new LinkedBlockingQueue<>(); private final VelocityHandler velocityHandler = new VelocityHandler(this); - private final HashSet pingCallbacks = new HashSet<>(); - private final HashSet connectionChangeCallbacks = new HashSet<>(); - private final LinkedList eventListeners = new LinkedList<>(); + private final LinkedList eventListeners = new LinkedList<>(); private final int connectionId; private final Player player; private final String hostname; - private RenderProperties renderProperties; - LinkedList addresses; + private RenderProperties renderProperties; LinkedList addresses; int desiredVersionNumber = -1; ServerAddress address; Thread handleThread; @@ -285,15 +276,6 @@ public class Connection { return connectionId; } - public void addPingCallback(PingCallback callback) { - if (getConnectionState() == ConnectionStates.FAILED || getConnectionState() == ConnectionStates.FAILED_NO_RETRY || lastPing != null) { - // ping done - callback.handle(lastPing); - return; - } - pingCallbacks.add(callback); - } - public ConnectionStates getConnectionState() { return state; } @@ -302,7 +284,7 @@ public class Connection { if (this.state == state) { return; } - Log.verbose("ConnectionStatus changed: " + state); + Log.verbose("ConnectionState changed: " + state); ConnectionStates previousState = this.state; this.state = state; switch (state) { @@ -323,7 +305,7 @@ public class Connection { if (a == null || b == null) { return 0; } - return -(b.getAnnotation().priority().ordinal() - a.getAnnotation().priority().ordinal()); + return -(b.getPriority().ordinal() - a.getPriority().ordinal()); }); // connection established, starting threads and logging in startHandlingThread(); @@ -377,11 +359,7 @@ public class Connection { } } // handle callbacks - connectionChangeCallbacks.forEach((callback -> callback.handle(this))); - } - - public HashSet getPingCallbacks() { - return pingCallbacks; + fireEvent(new ConnectionStateChangeEvent(this, previousState, state)); } public int getDesiredVersionNumber() { @@ -394,21 +372,23 @@ public class Connection { public void handlePingCallbacks(@Nullable ServerListPing ping) { this.lastPing = ping; - pingCallbacks.forEach((callback -> callback.handle(ping))); + fireEvent(new ServerListPingArriveEvent(this, ping)); + } + + public void registerEvent(EventInvoker method) { + eventListeners.add(method); + if (method.getEventType() == ServerListPingArriveEvent.class) { + if (getConnectionState() == ConnectionStates.FAILED || getConnectionState() == ConnectionStates.FAILED_NO_RETRY || lastPing != null) { + // ping done + method.invoke(new ServerListPingArriveEvent(this, lastPing)); + } + } } public Exception getLastConnectionException() { return (lastException != null) ? lastException : network.getLastException(); } - public void addConnectionChangeCallback(ConnectionChangeCallback callback) { - connectionChangeCallbacks.add(callback); - } - - public HashSet getConnectionChangeCallbacks() { - return connectionChangeCallbacks; - } - public ServerListPing getLastPing() { return lastPing; } 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 617738097..9f1dda46d 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 @@ -49,7 +49,6 @@ public class SocketNetwork implements Network { Socket socket; OutputStream outputStream; InputStream inputStream; - boolean encryptionEnabled = false; Exception lastException; public SocketNetwork(Connection connection) { @@ -149,21 +148,20 @@ public class SocketNetwork implements Network { int numRead = 0; int length = 0; int read; - do - { + do { read = inputStream.read(); if (read == -1) { disconnect(); return; } - int value = (read & 0b01111111); + int value = (read & 0x7F); length |= (value << (7 * numRead)); numRead++; if (numRead > 5) { throw new RuntimeException("VarInt is too big"); } - } while ((read & 0b10000000) != 0); + } while ((read & 0x80) != 0); if (length > ProtocolDefinition.PROTOCOL_PACKET_MAX_SIZE) { Log.protocol(String.format("Server sent us a to big packet (%d bytes > %d bytes)", length, ProtocolDefinition.PROTOCOL_PACKET_MAX_SIZE)); inputStream.skip(length); @@ -276,7 +274,6 @@ public class SocketNetwork implements Network { Cipher cipherDecrypt = CryptManager.createNetCipherInstance(Cipher.DECRYPT_MODE, secretKey); inputStream = new CipherInputStream(inputStream, cipherDecrypt); outputStream = new CipherOutputStream(outputStream, cipherEncrypt); - encryptionEnabled = true; Log.debug("Encryption enabled!"); } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.java b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.java index d49a6a999..40e2eac5b 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.java +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/clientbound/play/PacketJoinGame.java @@ -22,6 +22,7 @@ import de.bixilon.minosoft.logging.Log; import de.bixilon.minosoft.protocol.packets.ClientboundPacket; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; import de.bixilon.minosoft.protocol.protocol.PacketHandler; +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; import de.bixilon.minosoft.util.BitByte; import de.bixilon.minosoft.util.nbt.tag.CompoundTag; import de.bixilon.minosoft.util.nbt.tag.ListTag; @@ -98,9 +99,9 @@ public class PacketJoinGame implements ClientboundPacket { } else { CompoundTag tag = (CompoundTag) buffer.readNBT(); if (tag.getByteTag("has_skylight").getValue() == 0x01) { //ToDo: this is just for not messing up the skylight - dimension = dimensions.get("minecraft").get("overworld"); + dimension = dimensions.get(ProtocolDefinition.DEFAULT_MOD).get("overworld"); } else { - dimension = dimensions.get("minecraft").get("the_nether"); + dimension = dimensions.get(ProtocolDefinition.DEFAULT_MOD).get("the_nether"); } } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/ping/PingCallback.java b/src/main/java/de/bixilon/minosoft/protocol/ping/PingCallback.java deleted file mode 100644 index 4600e618a..000000000 --- a/src/main/java/de/bixilon/minosoft/protocol/ping/PingCallback.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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.protocol.ping; - -public interface PingCallback { - void handle(ServerListPing ping); -} 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 317d10e34..ba5ceeb60 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/InByteBuffer.java @@ -82,7 +82,7 @@ public class InByteBuffer { public byte[] readBytes(int count) { byte[] ret = new byte[count]; System.arraycopy(bytes, position, ret, 0, count); - position = position + count; + position += count; return ret; } @@ -97,33 +97,26 @@ public class InByteBuffer { } public String readString() { - int length = readVarInt(); - return new String(readBytes(length), StandardCharsets.UTF_8); + return new String(readBytes(readVarInt()), StandardCharsets.UTF_8); } public long readVarLong() { - int numRead = 0; + int byteCount = 0; long result = 0; byte read; - do - { + do { read = readByte(); - int value = (read & 0b01111111); - result |= (value << (7 * numRead)); - - numRead++; - if (numRead > 10) { - throw new RuntimeException("VarLong is too big"); + result |= (read & 0x7F) << (7 * byteCount); + byteCount++; + if (byteCount > 10) { + throw new IllegalArgumentException("VarLong is too big"); } - } while ((read & 0b10000000) != 0); - + } while ((read & 0x80) != 0); return result; } public boolean readBoolean() { - boolean ret; - ret = readByte() == 1; - return ret; + return readByte() == 1; } public short[] readLEShorts(int num) { @@ -152,21 +145,17 @@ public class InByteBuffer { } public int readVarInt() { - // thanks https://wiki.vg/Protocol#VarInt_and_VarLong - int numRead = 0; + int byteCount = 0; int result = 0; byte read; - do - { + do { read = readByte(); - int value = (read & 0b01111111); - result |= (value << (7 * numRead)); - - numRead++; - if (numRead > 5) { - throw new RuntimeException("VarInt is too big"); + result |= (read & 0x7F) << (7 * byteCount); + byteCount++; + if (byteCount > 5) { + throw new IllegalArgumentException("VarInt is too big"); } - } while ((read & 0b10000000) != 0); + } while ((read & 0x80) != 0); return result; } @@ -189,15 +178,13 @@ public class InByteBuffer { public BlockPosition readPosition() { //ToDo: protocol id 7 + long raw = readLong(); + int x = (int) (raw >> 38); if (versionId < 440) { - long raw = readLong(); - int x = (int) (raw >> 38); short y = (short) ((raw >> 26) & 0xFFF); int z = (int) (raw & 0x3FFFFFF); return new BlockPosition(x, y, z); } - long raw = readLong(); - int x = (int) (raw >> 38); short y = (short) (raw & 0xFFF); int z = (int) (raw << 26 >> 38); return new BlockPosition(x, y, z); diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.java index 31a5470f8..2f3a14c4a 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/LANServerListener.java @@ -43,7 +43,7 @@ public class LANServerListener { servers = HashBiMap.create(); MulticastSocket socket = new MulticastSocket(ProtocolDefinition.LAN_SERVER_BROADCAST_PORT); socket.joinGroup(ProtocolDefinition.LAN_SERVER_BROADCAST_ADDRESS); // ToDo: do not use deprecated methods - byte[] buf = new byte[65535]; + byte[] buf = new byte[256]; // this should be enough, if the packet is longer, it is probably invalid latch.countDown(); while (true) { try { @@ -52,7 +52,7 @@ public class LANServerListener { Log.protocol(String.format("LAN UDP Broadcast from %s:%s -> %s", packet.getAddress().getHostAddress(), packet.getPort(), new String(buf))); InetAddress sender = packet.getAddress(); if (servers.containsKey(sender)) { - // This guy sent us already a server, maybe a duplicate or a DOS attack...Skip + // This guy sent us already a server, maybe just the regular 1.5 second interval, a duplicate or a DOS attack...We don't care continue; } Server server = getServerByBroadcast(sender, packet.getData()); @@ -71,6 +71,7 @@ public class LANServerListener { } catch (Exception e) { e.printStackTrace(); + latch.countDown(); } servers = null; Log.warn("Stopping LAN Server Listener Thread"); @@ -83,6 +84,9 @@ public class LANServerListener { } public static void removeAll() { + if (servers == null) { + return; + } HashSet temp = new HashSet<>(servers.values()); for (Server server : temp) { if (server.isConnected()) { 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 135dc96fe..0ed8f00cf 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/OutByteBuffer.java @@ -54,17 +54,13 @@ public class OutByteBuffer { public void writeShort(short s) { ByteBuffer buffer = ByteBuffer.allocate(Short.BYTES); buffer.putShort(s); - for (byte b : buffer.array()) { - bytes.add(b); - } + writeBytes(buffer.array()); } public void writeInt(int i) { ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); buffer.putInt(i); - for (byte b : buffer.array()) { - bytes.add(b); - } + writeBytes(buffer.array()); } public void writeBytes(byte[] b) { @@ -76,9 +72,7 @@ public class OutByteBuffer { public void writeLong(Long l) { ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); buffer.putLong(l); - for (byte b : buffer.array()) { - bytes.add(b); - } + writeBytes(buffer.array()); } public void writeTextComponent(ChatComponent chatComponent) { @@ -89,21 +83,17 @@ public class OutByteBuffer { writeString(j.toString()); } - public void writeString(String s) { - writeVarInt(s.length()); - for (byte b : s.getBytes(StandardCharsets.UTF_8)) { - bytes.add(b); - } + public void writeString(String string) { + writeVarInt(string.length()); + writeBytes(string.getBytes(StandardCharsets.UTF_8)); } public void writeVarLong(long value) { - 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 + do { + byte temp = (byte) (value & 0x7F); value >>>= 7; if (value != 0) { - temp |= 0b10000000; + temp |= 0x80; } writeByte(temp); } while (value != 0); @@ -124,21 +114,17 @@ public class OutByteBuffer { public void writeDouble(Double d) { ByteBuffer buffer = ByteBuffer.allocate(Double.BYTES); buffer.putDouble(d); - for (byte b : buffer.array()) { - bytes.add(b); - } + writeBytes(buffer.array()); } public void writeUUID(UUID u) { ByteBuffer buffer = ByteBuffer.allocate(16); // UUID.BYTES buffer.putLong(u.getMostSignificantBits()); buffer.putLong(u.getLeastSignificantBits()); - for (byte b : buffer.array()) { - bytes.add(b); - } + writeBytes(buffer.array()); } - public void writeFixedPointNumberInteger(double d) { + public void writeFixedPointNumberInt(double d) { writeInt((int) (d * 32.0D)); } @@ -162,11 +148,10 @@ public class OutByteBuffer { // 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 + byte temp = (byte) (value & 0x7F); value >>>= 7; if (value != 0) { - temp |= 0b10000000; + temp |= 0x80; } writeByte(temp); } while (value != 0); @@ -177,11 +162,10 @@ public class OutByteBuffer { // 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 + byte temp = (byte) (value & 0x7F); value >>>= 7; if (value != 0) { - temp |= 0b10000000; + temp |= 0x80; } bytes.add(count++, temp); } while (value != 0); @@ -216,10 +200,8 @@ public class OutByteBuffer { bytes.add((byte) ((b) ? 0x01 : 0x00)); } - public void writeStringNoLength(String s) { - for (byte b : s.getBytes(StandardCharsets.UTF_8)) { - bytes.add(b); - } + public void writeStringNoLength(String string) { + writeBytes(string.getBytes(StandardCharsets.UTF_8)); } public void writeBlockPositionByte(BlockPosition pos) { @@ -236,15 +218,15 @@ public class OutByteBuffer { return ret; } - public void writeIntegers(int[] data) { - for (int integer : data) { - writeInt(integer); + public void writeInts(int[] data) { + for (int i : data) { + writeInt(i); } } public void writeLongs(long[] data) { - for (long long_long : data) { - writeLong(long_long); + for (long l : data) { + writeLong(l); } } 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 5376698a1..83396d544 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketHandler.java @@ -117,7 +117,9 @@ public class PacketHandler { connection.getPlayer().getWorld().setHardcore(pkg.isHardcore()); connection.getMapping().setDimensions(pkg.getDimensions()); connection.getPlayer().getWorld().setDimension(pkg.getDimension()); - connection.getPlayer().setEntity(new PlayerEntity(connection, pkg.getEntityId(), connection.getPlayer().getPlayerUUID(), null, null, connection.getPlayer().getPlayerName(), new PlayerPropertyData[]{}, null)); + PlayerEntity entity = new PlayerEntity(connection, pkg.getEntityId(), connection.getPlayer().getPlayerUUID(), null, null, connection.getPlayer().getPlayerName(), new PlayerPropertyData[]{}, null); + connection.getPlayer().setEntity(entity); + connection.getPlayer().getWorld().addEntity(entity); connection.getSender().sendChatMessage("I am alive! ~ Minosoft"); } @@ -376,13 +378,7 @@ public class PacketHandler { } public void handle(PacketEntityMetadata pkg) { - Entity entity; - if (pkg.getEntityId() == connection.getPlayer().getEntity().getEntityId()) { - // our own meta data...set it - entity = connection.getPlayer().getEntity(); - } else { - entity = connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); - } + Entity entity= connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); if(entity == null){ // thanks mojang return; @@ -472,13 +468,7 @@ public class PacketHandler { } public void handle(PacketEntityEffect pkg) { - Entity entity; - if (pkg.getEntityId() == connection.getPlayer().getEntity().getEntityId()) { - // that's us! - entity = connection.getPlayer().getEntity(); - } else { - entity = connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); - } + Entity entity= connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); if(entity == null){ // thanks mojang return; @@ -487,13 +477,7 @@ public class PacketHandler { } public void handle(PacketRemoveEntityEffect pkg) { - Entity entity; - if (pkg.getEntityId() == connection.getPlayer().getEntity().getEntityId()) { - // that's us! - entity = connection.getPlayer().getEntity(); - } else { - entity = connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); - } + Entity entity = connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); if(entity == null){ // thanks mojang return; @@ -533,13 +517,7 @@ public class PacketHandler { } public void handle(PacketAttachEntity pkg) { - Entity entity; - if (pkg.getEntityId() == connection.getPlayer().getEntity().getEntityId()) { - // that's us! - entity = connection.getPlayer().getEntity(); - } else { - entity = connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); - } + Entity entity = connection.getPlayer().getWorld().getEntity(pkg.getEntityId()); if(entity == null){ // thanks mojang return; diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketParseException.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketParseException.java index e14b50902..7c68c0487 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketParseException.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/PacketParseException.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.protocol; public class PacketParseException extends Exception { + public PacketParseException() { } diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java index caa427b44..c31beea0d 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/ProtocolDefinition.java @@ -35,6 +35,10 @@ public final class ProtocolDefinition { public static final InetAddress LAN_SERVER_BROADCAST_ADDRESS; public static final int LAN_SERVER_MAXIMUM_SERVERS = 100; // maximum number of lan servers, set because otherwise dos attacks would be easy + public static final String DEFAULT_MOD = "minecraft"; + + public static final int DEFAULT_BUFFER_SIZE = 4096; + static { try { LAN_SERVER_BROADCAST_ADDRESS = InetAddress.getByName("224.0.2.60"); diff --git a/src/main/java/de/bixilon/minosoft/protocol/protocol/UnknownPacketException.java b/src/main/java/de/bixilon/minosoft/protocol/protocol/UnknownPacketException.java index 5bbda1d67..bc1fad805 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/protocol/UnknownPacketException.java +++ b/src/main/java/de/bixilon/minosoft/protocol/protocol/UnknownPacketException.java @@ -14,6 +14,7 @@ package de.bixilon.minosoft.protocol.protocol; public class UnknownPacketException extends Exception { + public UnknownPacketException() { } diff --git a/src/main/java/de/bixilon/minosoft/render/texture/TextureLoader.java b/src/main/java/de/bixilon/minosoft/render/texture/TextureLoader.java index a3034f76e..8a2632d49 100644 --- a/src/main/java/de/bixilon/minosoft/render/texture/TextureLoader.java +++ b/src/main/java/de/bixilon/minosoft/render/texture/TextureLoader.java @@ -48,7 +48,7 @@ public class TextureLoader { } combineTextures(); try { - PNGDecoder decoder = new PNGDecoder(new FileInputStream(StaticConfiguration.HOME_DIR + "assets/allTextures.png")); + PNGDecoder decoder = new PNGDecoder(new FileInputStream(StaticConfiguration.HOME_DIRECTORY + "assets/allTextures.png")); ByteBuffer buf = ByteBuffer.allocateDirect(decoder.getWidth() * decoder.getHeight() * 4); decoder.decode(buf, decoder.getWidth() * 4, PNGDecoder.Format.RGBA); textureID = bindTexture(buf, decoder.getWidth(), decoder.getHeight()); @@ -115,7 +115,7 @@ public class TextureLoader { } try { - File outputFile = new File(StaticConfiguration.HOME_DIR + "assets/allTextures.png"); + File outputFile = new File(StaticConfiguration.HOME_DIRECTORY + "assets/allTextures.png"); ImageIO.write(totalImage, "png", outputFile); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/de/bixilon/minosoft/util/ChunkUtil.java b/src/main/java/de/bixilon/minosoft/util/ChunkUtil.java index 516e598cb..624334b1a 100644 --- a/src/main/java/de/bixilon/minosoft/util/ChunkUtil.java +++ b/src/main/java/de/bixilon/minosoft/util/ChunkUtil.java @@ -110,7 +110,6 @@ public final class ChunkUtil { if (containsSkyLight) { skyLight = buffer.readBytes(halfBytes); } - if (groundUpContinuous) { byte[] biomes = buffer.readBytes(RenderConstants.SECTION_WIDTH * RenderConstants.SECTION_WIDTH); } diff --git a/src/main/java/de/bixilon/minosoft/util/DNSUtil.java b/src/main/java/de/bixilon/minosoft/util/DNSUtil.java index 331a2b260..48e58d6c9 100644 --- a/src/main/java/de/bixilon/minosoft/util/DNSUtil.java +++ b/src/main/java/de/bixilon/minosoft/util/DNSUtil.java @@ -49,7 +49,6 @@ public final class DNSUtil { return new ServerAddress(splitHostname[0], ProtocolDefinition.DEFAULT_PORT); } return new ServerAddress(splitHostname[0], Integer.parseInt(splitHostname[1])); - } public static String correctHostName(String hostname) { @@ -57,5 +56,4 @@ public final class DNSUtil { hostname = hostname.replaceAll("\\s", ""); return hostname.toLowerCase(); } - } diff --git a/src/main/java/de/bixilon/minosoft/util/HTTP.java b/src/main/java/de/bixilon/minosoft/util/HTTP.java index bf5703290..c214f8201 100644 --- a/src/main/java/de/bixilon/minosoft/util/HTTP.java +++ b/src/main/java/de/bixilon/minosoft/util/HTTP.java @@ -32,7 +32,7 @@ public final class HTTP { HttpRequest request = HttpRequest.newBuilder().uri(URI.create(url)).POST(HttpRequest.BodyPublishers.ofString(json.toString())).header("Content-Type", "application/json").build(); try { return client.send(request, HttpResponse.BodyHandlers.ofString()); - } catch (IOException | InterruptedException e) { + } catch (Exception e) { Log.printException(e, LogLevels.DEBUG); } return null; diff --git a/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java b/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java new file mode 100644 index 000000000..0f7bc1584 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/util/MinosoftCommandLineArguments.java @@ -0,0 +1,69 @@ +/* + * 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.util; + +import de.bixilon.minosoft.config.StaticConfiguration; +import org.apache.commons.cli.*; + +import javax.annotation.Nullable; +import java.util.HashMap; + +public class MinosoftCommandLineArguments { + private static final HashMap optionHashMap = new HashMap<>(); + private static final Options options = new Options(); + private static final HelpFormatter formatter = new HelpFormatter(); + + static { + registerDefaultArguments(); + } + + public static void parseCommandLineArguments(String[] args) { + MinosoftCommandLineArguments.optionHashMap.forEach((option, commandLineArgumentHandler) -> options.addOption(option)); + + + try { + CommandLine commandLine = new DefaultParser().parse(options, args); + + for (Option option : commandLine.getOptions()) { + if (!MinosoftCommandLineArguments.optionHashMap.containsKey(option)) { + continue; + } + MinosoftCommandLineArguments.optionHashMap.get(option).handle(option.getValue()); + } + } catch (ParseException e) { + System.out.println(e.getMessage()); + formatter.printHelp("java -jar Minosoft.jar", options); + System.exit(1); + } + } + + public static void registerCommandLineOption(Option option, CommandLineArgumentHandler handler) { + optionHashMap.put(option, handler); + } + + private static void registerDefaultArguments() { + registerCommandLineOption(new Option("?", "help", false, "Displays this help"), (value -> { + formatter.printHelp("java -jar Minosoft.jar", options); + System.exit(1); + })); + registerCommandLineOption(new Option("home_folder", true, "Home of Minosoft"), (value -> StaticConfiguration.HOME_DIRECTORY = value + "/")); + registerCommandLineOption(new Option("colored_log", true, "Should the log be colored"), (value -> StaticConfiguration.COLORED_LOG = Boolean.parseBoolean(value))); + registerCommandLineOption(new Option("verbose_entity_logging", true, "Should entity meta data be printed"), (value -> StaticConfiguration.VERBOSE_ENTITY_META_DATA_LOGGING = Boolean.parseBoolean(value))); + registerCommandLineOption(new Option("log_time_relativ", true, "Should time in log timestamp be relative"), (value -> StaticConfiguration.LOG_RELATIVE_TIME = Boolean.parseBoolean(value))); + } + + public interface CommandLineArgumentHandler { + void handle(@Nullable String value); + } +} diff --git a/src/main/java/de/bixilon/minosoft/util/Util.java b/src/main/java/de/bixilon/minosoft/util/Util.java index 74b3e48a4..ec2cafa20 100644 --- a/src/main/java/de/bixilon/minosoft/util/Util.java +++ b/src/main/java/de/bixilon/minosoft/util/Util.java @@ -18,6 +18,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import de.bixilon.minosoft.protocol.network.Connection; import de.bixilon.minosoft.protocol.protocol.InByteBuffer; +import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; @@ -56,7 +57,7 @@ public final class Util { public static byte[] decompress(byte[] bytes) { Inflater inflater = new Inflater(); inflater.setInput(bytes, 0, bytes.length); - byte[] buffer = new byte[4096]; + byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; ByteArrayOutputStream stream = new ByteArrayOutputStream(bytes.length); try { while (!inflater.finished()) { @@ -73,7 +74,7 @@ public final class Util { Deflater deflater = new Deflater(); deflater.setInput(bytes); deflater.finish(); - byte[] buffer = new byte[4096]; + byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; ByteArrayOutputStream stream = new ByteArrayOutputStream(bytes.length); while (!deflater.finished()) { stream.write(buffer, 0, deflater.deflate(buffer)); @@ -91,11 +92,11 @@ public final class Util { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); int res = 0; - byte[] buf = new byte[4096]; + byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; while (res >= 0) { - res = gzipInputStream.read(buf, 0, buf.length); + res = gzipInputStream.read(buffer, 0, buffer.length); if (res > 0) { - outputStream.write(buf, 0, res); + outputStream.write(buffer, 0, res); } } gzipInputStream.close(); @@ -127,9 +128,9 @@ public final class Util { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); - byte[] buffer = new byte[4096]; + byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; int length; - while ((length = inputStream.read(buffer, 0, 4096)) != -1) { + while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) { crypt.update(buffer, 0, length); } return byteArrayToHexString(crypt.digest()); @@ -226,18 +227,18 @@ public final class Util { public static void downloadFile(String url, String destination) throws IOException { createParentFolderIfNotExist(destination); - copyFile(getInputStreamByURL(url), new FileOutputStream(destination)); + copyStream(getInputStreamByURL(url), new FileOutputStream(destination)); } public static void downloadFileAsGz(String url, String destination) throws IOException { createParentFolderIfNotExist(destination); - copyFile(getInputStreamByURL(url), new GZIPOutputStream(new FileOutputStream(destination))); + copyStream(getInputStreamByURL(url), new GZIPOutputStream(new FileOutputStream(destination))); } - public static void copyFile(InputStream inputStream, OutputStream output) throws IOException { - byte[] buffer = new byte[4096]; + public static void copyStream(InputStream inputStream, OutputStream output) throws IOException { + byte[] buffer = new byte[ProtocolDefinition.DEFAULT_BUFFER_SIZE]; int length; - while ((length = inputStream.read(buffer, 0, 4096)) != -1) { + while ((length = inputStream.read(buffer, 0, buffer.length)) != -1) { output.write(buffer, 0, length); } inputStream.close(); diff --git a/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java b/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java index 91dd2d8fd..bf46fab9b 100644 --- a/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java +++ b/src/main/java/de/bixilon/minosoft/util/nbt/tag/IntArrayTag.java @@ -37,7 +37,7 @@ public class IntArrayTag extends NBTTag { @Override public void writeBytes(OutByteBuffer buffer) { new IntTag(value.length).writeBytes(buffer); - buffer.writeIntegers(value); + buffer.writeInts(value); } public int[] getValue() { diff --git a/util/entitiesFieldMojangMinosoftMappings.json b/util/entitiesFieldMojangMinosoftMappings.json index 50d2da5da..065946358 100644 --- a/util/entitiesFieldMojangMinosoftMappings.json +++ b/util/entitiesFieldMojangMinosoftMappings.json @@ -749,5 +749,8 @@ }, "LightningBolt": { "extends": "Entity" + }, + "PigZombie": { + "extends": "Zombie" } }