Browse Source

first version of update to 1.16.4

Kajetan Johannes Hammerle 3 years ago
parent
commit
72fa9bd652
83 changed files with 571 additions and 1739 deletions
  1. 2 2
      build.gradle
  2. 20 8
      src/main/java/me/km/Client.java
  3. 8 4
      src/main/java/me/km/KajetansMod.java
  4. 0 41
      src/main/java/me/km/ObjectRegistry.java
  5. 3 4
      src/main/java/me/km/Server.java
  6. 5 6
      src/main/java/me/km/blocks/BlockGravelSlab.java
  7. 3 7
      src/main/java/me/km/blocks/BlockLantern.java
  8. 2 7
      src/main/java/me/km/blocks/BlockModBed.java
  9. 0 15
      src/main/java/me/km/blocks/BlockModSapling.java
  10. 0 5
      src/main/java/me/km/blocks/BlockSpikes.java
  11. 27 28
      src/main/java/me/km/blocks/ModBlocks.java
  12. 18 15
      src/main/java/me/km/blocks/ModTree.java
  13. 1 1
      src/main/java/me/km/blocks/cookingpot/BlockCookingPot.java
  14. 3 3
      src/main/java/me/km/blocks/cookingpot/TileEntityCookingPot.java
  15. 0 16
      src/main/java/me/km/entities/EntityBlackBear.java
  16. 0 16
      src/main/java/me/km/entities/EntityBrownBear.java
  17. 9 9
      src/main/java/me/km/entities/EntityHuman.java
  18. 16 11
      src/main/java/me/km/entities/EntityItemProjectile.java
  19. 1 1
      src/main/java/me/km/entities/EntityNobody.java
  20. 3 18
      src/main/java/me/km/entities/ModEntities.java
  21. 0 30
      src/main/java/me/km/entities/RenderBlackBear.java
  22. 0 30
      src/main/java/me/km/entities/RenderBrownBear.java
  23. 6 6
      src/main/java/me/km/entities/RenderHuman.java
  24. 1 1
      src/main/java/me/km/inventory/CustomContainer.java
  25. 3 3
      src/main/java/me/km/items/ItemColoredSoup.java
  26. 8 3
      src/main/java/me/km/items/ItemKey.java
  27. 0 10
      src/main/java/me/km/items/ItemSling.java
  28. 5 0
      src/main/java/me/km/items/ModArmorMaterial.java
  29. 7 7
      src/main/java/me/km/items/ModItems.java
  30. 14 13
      src/main/java/me/km/networking/CustomInventoryScreen.java
  31. 3 2
      src/main/java/me/km/networking/ItemStackDisplayGui.java
  32. 1 1
      src/main/java/me/km/networking/KeyManager.java
  33. 7 6
      src/main/java/me/km/networking/PlayerDisplayGui.java
  34. 6 5
      src/main/java/me/km/networking/PlayerHeadGui.java
  35. 52 77
      src/main/java/me/km/networking/StatusDisplayGui.java
  36. 0 71
      src/main/java/me/km/overrides/ModCapeLayer.java
  37. 91 179
      src/main/java/me/km/overrides/ModPlayerList.java
  38. 0 14
      src/main/java/me/km/overrides/ModPlayerRenderer.java
  39. 0 71
      src/main/java/me/km/overrides/PlayerCapeLoader.java
  40. 3 2
      src/main/java/me/km/permissions/Command.java
  41. 2 2
      src/main/java/me/km/permissions/ModCommandManager.java
  42. 7 7
      src/main/java/me/km/plots/ProtectionEvents.java
  43. 18 18
      src/main/java/me/km/plots/WorldPlotMap.java
  44. 5 5
      src/main/java/me/km/snuviscript/FakeMerchant.java
  45. 13 11
      src/main/java/me/km/snuviscript/ScriptEvents.java
  46. 4 3
      src/main/java/me/km/snuviscript/SnuviLogger.java
  47. 11 8
      src/main/java/me/km/snuviscript/commands/BlockCommands.java
  48. 4 3
      src/main/java/me/km/snuviscript/commands/CommandUtils.java
  49. 1 2
      src/main/java/me/km/snuviscript/commands/DamageCommands.java
  50. 21 20
      src/main/java/me/km/snuviscript/commands/EntityCommands.java
  51. 1 1
      src/main/java/me/km/snuviscript/commands/HumanCommands.java
  52. 7 3
      src/main/java/me/km/snuviscript/commands/ItemCommands.java
  53. 2 2
      src/main/java/me/km/snuviscript/commands/ItemEntityCommands.java
  54. 19 17
      src/main/java/me/km/snuviscript/commands/LivingCommands.java
  55. 3 3
      src/main/java/me/km/snuviscript/commands/LocationCommands.java
  56. 13 11
      src/main/java/me/km/snuviscript/commands/PlayerCommands.java
  57. 4 4
      src/main/java/me/km/snuviscript/commands/PlotCommands.java
  58. 1 1
      src/main/java/me/km/snuviscript/commands/ReadCommands.java
  59. 13 36
      src/main/java/me/km/snuviscript/commands/WorldCommands.java
  60. 0 16
      src/main/java/me/km/utils/ClientReflectionUtils.java
  61. 0 82
      src/main/java/me/km/utils/ExplosionUtils.java
  62. 1 1
      src/main/java/me/km/utils/ItemStackUtils.java
  63. 18 15
      src/main/java/me/km/utils/Location.java
  64. 2 2
      src/main/java/me/km/utils/LocationIterator.java
  65. 2 2
      src/main/java/me/km/utils/Mapper.java
  66. 21 60
      src/main/java/me/km/utils/ReflectionUtils.java
  67. 29 24
      src/main/java/me/km/utils/Utils.java
  68. 0 48
      src/main/java/me/km/world/ModBiomeProvider.java
  69. 0 14
      src/main/java/me/km/world/ModDimensionFactory.java
  70. 0 48
      src/main/java/me/km/world/ModOverworldDimension.java
  71. 16 36
      src/main/java/me/km/world/ModWorldGeneration.java
  72. 0 319
      src/main/java/me/km/world/ModWorldInfo.java
  73. 0 23
      src/main/java/me/km/world/WorldEvents.java
  74. 0 123
      src/main/java/me/km/world/WorldManager.java
  75. 3 2
      src/main/resources/META-INF/mods.toml
  76. 0 5
      src/main/resources/assets/km/lang/en_us.json
  77. 0 6
      src/main/resources/assets/km/models/item/bear_black_fur.json
  78. 0 6
      src/main/resources/assets/km/models/item/bear_brown_fur.json
  79. BIN
      src/main/resources/assets/km/textures/entity/bear/blackbear.png
  80. BIN
      src/main/resources/assets/km/textures/entity/bear/brownbear.png
  81. BIN
      src/main/resources/assets/km/textures/item/fur/bear_black_fur.png
  82. BIN
      src/main/resources/assets/km/textures/item/fur/bear_brown_fur.png
  83. 2 2
      src/main/resources/pack.mcmeta

+ 2 - 2
build.gradle

@@ -16,7 +16,7 @@ group = 'me.hammerle.km'
 archivesBaseName = 'km'
 
 minecraft {
-    mappings channel: 'snapshot', version: '20200514-1.15.1'
+    mappings channel: 'snapshot', version: '20201028-1.16.3'
 
     runs {
         client {
@@ -40,7 +40,7 @@ compileJava {
 }
 
 dependencies {
-    minecraft 'net.minecraftforge:forge:1.15.2-31.2.21'
+    minecraft 'net.minecraftforge:forge:1.16.4-35.1.13'
     
     compile 'mysql:mysql-connector-java:5.1.42'
     

+ 20 - 8
src/main/java/me/km/Client.java

@@ -24,10 +24,8 @@ import net.minecraft.client.gui.screen.MainMenuScreen;
 import net.minecraft.client.gui.screen.MultiplayerScreen;
 import net.minecraft.client.gui.screen.Screen;
 import net.minecraft.client.renderer.IRenderTypeBuffer;
-import net.minecraft.client.renderer.Matrix4f;
 import net.minecraft.client.renderer.RenderType;
 import net.minecraft.client.renderer.RenderTypeLookup;
-import net.minecraft.client.renderer.Vector3f;
 import net.minecraft.client.renderer.color.BlockColors;
 import net.minecraft.client.renderer.color.IBlockColor;
 import net.minecraft.client.renderer.color.ItemColors;
@@ -36,10 +34,14 @@ import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.world.ClientWorld;
 import net.minecraft.entity.Entity;
 import net.minecraft.item.BlockItem;
+import static net.minecraft.item.ItemModelsProperties.registerProperty;
 import net.minecraft.item.ItemStack;
 import net.minecraft.particles.ParticleTypes;
+import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.MathHelper;
+import net.minecraft.util.math.vector.Matrix4f;
+import net.minecraft.util.math.vector.Vector3f;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.world.GameType;
 import net.minecraft.world.GrassColors;
@@ -67,7 +69,6 @@ public class Client {
         keyManager = new KeyManager();
         MinecraftForge.EVENT_BUS.register(keyManager);
         registerColors();
-        ClientReflectionUtils.updatePlayerRenderer();
     }
 
     private static void registerColors() {
@@ -111,6 +112,17 @@ public class Client {
         iColors.register((stack, tintIndex) -> tallGrass.getColor(
                 ((BlockItem) stack.getItem()).getBlock().getDefaultState(),
                 null, null, tintIndex), ModBlocks.tallGrass);
+        
+        registerProperty(ModItems.sling, new ResourceLocation("pull"), (stack, w, ent) -> {
+            if(ent == null) {
+                return 0.0F;
+            } else {
+                return ent.getActiveItemStack() != stack ? 0.0f : (float) (stack.getUseDuration() - ent.getItemInUseCount()) / 20.0f;
+            }
+        });
+        registerProperty(ModItems.sling, new ResourceLocation("pulling"), (ent, w, stack) -> {
+            return stack != null && stack.isHandActive() && stack.getActiveItemStack() == ent ? 1.0F : 0.0F;
+        });
     }
 
     @SubscribeEvent
@@ -193,7 +205,7 @@ public class Client {
                 if(text == null) {
                     text = ent.getDisplayName();
                 }
-                String s = text.getFormattedText();
+                String s = text.getString();
                 String[] parts = s.split("\n");
 
                 int packedLight = renderer.getPackedLight(ent, Minecraft.getInstance().getRenderPartialTicks());
@@ -234,10 +246,10 @@ public class Client {
     @SubscribeEvent
     public void onRenderGui(RenderGameOverlayEvent.Post e) {
         if(e.getType() == RenderGameOverlayEvent.ElementType.EXPERIENCE) {
-            PlayerDisplayGui.INSTANCE.paint();
-            StatusDisplayGui.INSTANCE.paint();
-            PlayerHeadGui.INSTANCE.paint();
-            ItemStackDisplayGui.INSTANCE.paint(keyManager);
+            PlayerDisplayGui.INSTANCE.paint(e.getMatrixStack());
+            StatusDisplayGui.INSTANCE.paint(e.getMatrixStack());
+            PlayerHeadGui.INSTANCE.paint(e.getMatrixStack());
+            ItemStackDisplayGui.INSTANCE.paint(e.getMatrixStack(), keyManager);
         }
     }
 

+ 8 - 4
src/main/java/me/km/KajetansMod.java

@@ -2,15 +2,17 @@ package me.km;
 
 import me.km.networking.ModPacketHandler;
 import me.km.world.ModWorldGeneration;
+import net.minecraft.server.dedicated.DedicatedServer;
 import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
 import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
-import net.minecraftforge.fml.event.lifecycle.FMLDedicatedServerSetupEvent;
+import net.minecraftforge.fml.event.lifecycle.ModLifecycleEvent;
 import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
 import net.minecraftforge.fml.common.Mod;
 import net.minecraftforge.eventbus.api.IEventBus;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.DeferredWorkQueue;
+import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
 import net.minecraftforge.fml.event.server.FMLServerStoppedEvent;
 
 @Mod.EventBusSubscriber
@@ -23,7 +25,6 @@ public class KajetansMod {
 
         IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
         bus.addListener(this::init);
-        bus.addListener(this::setupServer);
         bus.addListener(this::clientInit);
         bus.addListener(this::onServerStop);
 
@@ -41,8 +42,11 @@ public class KajetansMod {
         Client.init();
     }
 
-    private void setupServer(FMLDedicatedServerSetupEvent e) {
-        Server.onStart(e.getServerSupplier().get());
+    @SubscribeEvent
+    public void onServerStart(FMLServerStartingEvent e) {
+        if(e.getServer().isDedicatedServer()) {
+            Server.onStart((DedicatedServer) e.getServer());
+        }
     }
 
     @SubscribeEvent

+ 0 - 41
src/main/java/me/km/ObjectRegistry.java

@@ -1,26 +1,15 @@
 package me.km;
 
-import com.google.common.collect.ImmutableSet;
-import java.util.Set;
 import me.km.blocks.ModBlocks;
 import me.km.blocks.cookingpot.TileEntityCookingPot;
 import me.km.entities.ModEntities;
 import me.km.items.ModItems;
-import me.km.utils.ReflectionUtils;
-import me.km.world.ModBiomeProvider;
-import me.km.world.WorldManager;
 import net.minecraft.block.Block;
 import net.minecraft.block.Blocks;
 import net.minecraft.entity.EntityType;
 import net.minecraft.item.Item;
 import net.minecraft.item.Items;
 import net.minecraft.tileentity.TileEntityType;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.world.biome.Biome;
-import net.minecraft.world.biome.Biomes;
-import net.minecraft.world.biome.provider.BiomeProviderType;
-import net.minecraft.world.biome.provider.OverworldBiomeProviderSettings;
-import net.minecraftforge.common.ModDimension;
 import net.minecraftforge.event.RegistryEvent;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.common.Mod;
@@ -78,34 +67,4 @@ public class ObjectRegistry {
     public static void onTileEntityTypeRegistry(RegistryEvent.Register<TileEntityType<?>> e) {
         e.getRegistry().register(TileEntityCookingPot.COOKING_POT);
     }
-
-    @SubscribeEvent
-    public static void onModDimensionRegistry(RegistryEvent.Register<ModDimension> e) {
-        e.getRegistry().register(WorldManager.MOD_DIMENSION);
-    }
-
-    public static BiomeProviderType<OverworldBiomeProviderSettings, ModBiomeProvider> DESERT_BIOME_PROVIDER;
-    public static BiomeProviderType<OverworldBiomeProviderSettings, ModBiomeProvider> SNOW_BIOME_PROVIDER;
-
-    private static BiomeProviderType createBiomeProviderType(Set<Biome> biomes, String name) {
-        BiomeProviderType provider = ReflectionUtils.newBiomeProviderType((OverworldBiomeProviderSettings settings) -> {
-            return new ModBiomeProvider(biomes, settings);
-        }, OverworldBiomeProviderSettings::new);
-        provider.setRegistryName(new ResourceLocation("km", name));
-        return provider;
-    }
-
-    @SubscribeEvent
-    public static void onBiomeProviderTypeRegistry(RegistryEvent.Register<BiomeProviderType<?, ?>> e) {
-        DESERT_BIOME_PROVIDER = createBiomeProviderType(ImmutableSet.of(
-                Biomes.DESERT, Biomes.DESERT_HILLS, Biomes.BADLANDS, Biomes.BADLANDS_PLATEAU,
-                Biomes.DESERT_LAKES, Biomes.ERODED_BADLANDS, Biomes.MODIFIED_BADLANDS_PLATEAU), "desert_layered");
-        SNOW_BIOME_PROVIDER = createBiomeProviderType(ImmutableSet.of(
-                Biomes.FROZEN_OCEAN, Biomes.FROZEN_RIVER, Biomes.SNOWY_TUNDRA,
-                Biomes.SNOWY_MOUNTAINS, Biomes.SNOWY_BEACH, Biomes.SNOWY_TAIGA,
-                Biomes.SNOWY_TAIGA_HILLS, Biomes.DEEP_FROZEN_OCEAN,
-                Biomes.ICE_SPIKES, Biomes.SNOWY_TAIGA_MOUNTAINS), "snow_layered");
-
-        e.getRegistry().registerAll(DESERT_BIOME_PROVIDER, SNOW_BIOME_PROVIDER);
-    }
 }

+ 3 - 4
src/main/java/me/km/Server.java

@@ -28,7 +28,7 @@ import me.km.snuviscript.MinecraftFunctions;
 import me.km.snuviscript.ScriptBank;
 import me.km.snuviscript.ScriptEvents;
 import me.km.snuviscript.Scripts;
-import me.km.world.WorldEvents;
+import net.minecraft.util.registry.DynamicRegistries;
 
 @OnlyIn(Dist.DEDICATED_SERVER)
 public class Server {
@@ -66,7 +66,7 @@ public class Server {
 
         // mod player list hook
         Hooks.setPlayerListFunction(ds -> {
-            ds.setPlayerList(new ModPlayerList(ds));
+            ds.setPlayerList(new ModPlayerList(ds, (DynamicRegistries.Impl) ds.func_244267_aX(), ReflectionUtils.getPlayerDataManager(ds)));
         });
 
         // scripts
@@ -77,7 +77,7 @@ public class Server {
         MinecraftForge.EVENT_BUS.register(scriptEvents);
 
         // command manager
-        commands = new ModCommandManager(true, perms, scriptEvents, scripts, scheduler);
+        commands = new ModCommandManager(perms, scriptEvents, scripts, scheduler);
         ReflectionUtils.setCommandManager(server, commands);
         commands.registerCommand(new CommandScript(scripts, server));
 
@@ -122,7 +122,6 @@ public class Server {
                 scripts.getScriptManager(), scripts, perms, scheduler, server, playerBank,
                 customEventCaller, scriptBank, databank, plotMap, commands);
 
-        MinecraftForge.EVENT_BUS.register(new WorldEvents());
         scheduler.scheduleTask(() -> scripts.startScript(null, "startscript"));
     }
 

+ 5 - 6
src/main/java/me/km/blocks/BlockGravelSlab.java

@@ -13,7 +13,6 @@ import net.minecraft.state.properties.SlabType;
 import net.minecraft.util.Direction;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.IWorld;
-import net.minecraft.world.IWorldReader;
 import net.minecraft.world.World;
 import net.minecraft.world.server.ServerWorld;
 import net.minecraftforge.api.distmarker.Dist;
@@ -32,12 +31,13 @@ public class BlockGravelSlab extends SlabBlock {
 
     @Override
     public void onBlockAdded(BlockState state, World w, BlockPos pos, BlockState oldState, boolean isMoving) {
-        w.getPendingBlockTicks().scheduleTick(pos, this, this.tickRate(w));
+        w.getPendingBlockTicks().scheduleTick(pos, this, getFallDelay());
     }
 
     @Override
-    public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld w, BlockPos currentPos, BlockPos facingPos) {
-        w.getPendingBlockTicks().scheduleTick(currentPos, this, this.tickRate(w));
+    public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld w,
+            BlockPos currentPos, BlockPos facingPos) {
+        w.getPendingBlockTicks().scheduleTick(currentPos, this, getFallDelay());
         return super.updatePostPlacement(state, facing, facingState, w, currentPos, facingPos);
     }
 
@@ -57,8 +57,7 @@ public class BlockGravelSlab extends SlabBlock {
         }
     }
 
-    @Override
-    public int tickRate(IWorldReader w) {
+    protected int getFallDelay() {
         return 2;
     }
 

+ 3 - 7
src/main/java/me/km/blocks/BlockLantern.java

@@ -33,7 +33,8 @@ public class BlockLantern extends DirectionalBlock {
     protected String name;
 
     public BlockLantern(String name) {
-        super(Properties.create(Material.MISCELLANEOUS).doesNotBlockMovement().hardnessAndResistance(0.0f).lightValue(14).sound(SoundType.METAL));
+        super(Properties.create(Material.MISCELLANEOUS).doesNotBlockMovement().hardnessAndResistance(0.0f)
+                .setLightLevel(state -> 14).sound(SoundType.METAL));
         this.setRegistryName(name);
         this.setDefaultState(this.stateContainer.getBaseState().with(FACING, Direction.UP));
     }
@@ -83,11 +84,6 @@ public class BlockLantern extends DirectionalBlock {
         w.addParticle(ParticleTypes.FLAME, x, y, z, 0.0, 0.0, 0.0);
     }
 
-    @Override
-    public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
-        return false;
-    }
-
     @Override
     protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
         builder.add(FACING);
@@ -101,7 +97,7 @@ public class BlockLantern extends DirectionalBlock {
         }
         BlockPos blockpos = pos.offset(direction.getOpposite());
         BlockState blockstate = w.getBlockState(blockpos);
-        return Block.hasSolidSide(blockstate, w, blockpos, direction);
+        return blockstate.isSolidSide(w, blockpos, direction);
     }
 
     @Override

+ 2 - 7
src/main/java/me/km/blocks/BlockModBed.java

@@ -25,8 +25,8 @@ public abstract class BlockModBed extends BedBlock {
     }
 
     @Override
-    public MaterialColor getMaterialColor(BlockState state, IBlockReader w, BlockPos pos) {
-        return this.materialColor;
+    public MaterialColor getMaterialColor() {
+        return material.getColor();
     }
 
     @Override
@@ -53,9 +53,4 @@ public abstract class BlockModBed extends BedBlock {
     public boolean hasTileEntity(BlockState state) {
         return false;
     }
-
-    @Override
-    public boolean hasTileEntity() {
-        return false;
-    }
 }

+ 0 - 15
src/main/java/me/km/blocks/BlockModSapling.java

@@ -1,15 +0,0 @@
-package me.km.blocks;
-
-import net.minecraft.block.Block;
-import net.minecraft.block.SaplingBlock;
-import net.minecraft.block.SoundType;
-import net.minecraft.block.material.Material;
-import net.minecraft.block.trees.Tree;
-
-// this class just exists because the SaplingBlock constructor is protected
-public class BlockModSapling extends SaplingBlock {
-    public BlockModSapling(Tree tree) {
-        super(tree, Block.Properties.create(Material.PLANTS).doesNotBlockMovement()
-                .tickRandomly().hardnessAndResistance(0.0f, 0.0f).sound(SoundType.PLANT));
-    }
-}

+ 0 - 5
src/main/java/me/km/blocks/BlockSpikes.java

@@ -40,11 +40,6 @@ public class BlockSpikes extends Block {
         }
     }
 
-    @Override
-    public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos) {
-        return false;
-    }
-
     @Override
     public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld w, BlockPos currentPos, BlockPos facingPos) {
         return !stateIn.isValidPosition(w, currentPos) ? Blocks.AIR.getDefaultState()

+ 27 - 28
src/main/java/me/km/blocks/ModBlocks.java

@@ -1,16 +1,16 @@
 package me.km.blocks;
 
 import me.km.blocks.cookingpot.BlockCookingPot;
-import net.minecraft.block.BarrierBlock;
+import me.km.utils.ReflectionUtils;
+import net.minecraft.block.AbstractBlock.Properties;
 import net.minecraft.block.Block;
-import net.minecraft.block.Block.Properties;
 import net.minecraft.block.SoundType;
 import net.minecraft.block.material.Material;
 import net.minecraft.block.material.MaterialColor;
 import net.minecraft.block.BlockState;
 import net.minecraft.block.Blocks;
-import net.minecraft.block.FireBlock;
 import net.minecraft.block.LeavesBlock;
+import net.minecraft.block.SaplingBlock;
 import net.minecraft.block.SlabBlock;
 import net.minecraft.item.Item;
 import net.minecraft.item.BlockItem;
@@ -112,10 +112,10 @@ public class ModBlocks {
         return b;
     }
 
-    private static Block createSapling(String registry, BlockState wood, BlockState leaves) {
-        ModTree tree = new ModTree();
-        BlockModSapling b = new BlockModSapling(tree);
-        tree.setConfig(wood, leaves, b);
+    private static Block createSapling(String registry, BlockState leaves) {
+        ModTree tree = new ModTree(leaves);
+        SaplingBlock b = new SaplingBlock(tree, Block.Properties.create(Material.PLANTS).doesNotBlockMovement()
+                .tickRandomly().hardnessAndResistance(0.0f, 0.0f).sound(SoundType.PLANT));
         b.setRegistryName(registry);
         return b;
     }
@@ -132,7 +132,7 @@ public class ModBlocks {
                 .hardnessAndResistance(-1.0F, 3600000.8F)
                 .noDrops()
                 .doesNotBlockMovement()
-                .lightValue(15));
+                .setLightLevel(state -> 15));
         b.setRegistryName(registry);
         return b;
     }
@@ -196,10 +196,10 @@ public class ModBlocks {
         plumLeaves = register(r, createLeaves("plum_leaves"));
 
         // saplings
-        cherrySapling = register(r, createSapling("cherry_sapling", Blocks.OAK_LOG.getDefaultState(), cherryLeaves.getDefaultState()));
-        apricotSapling = register(r, createSapling("apricot_sapling", Blocks.OAK_LOG.getDefaultState(), apricotLeaves.getDefaultState()));
-        pearSapling = register(r, createSapling("pear_sapling", Blocks.OAK_LOG.getDefaultState(), pearLeaves.getDefaultState()));
-        plumSapling = register(r, createSapling("plum_sapling", Blocks.OAK_LOG.getDefaultState(), plumLeaves.getDefaultState()));
+        cherrySapling = register(r, createSapling("cherry_sapling", cherryLeaves.getDefaultState()));
+        apricotSapling = register(r, createSapling("apricot_sapling", apricotLeaves.getDefaultState()));
+        pearSapling = register(r, createSapling("pear_sapling", pearLeaves.getDefaultState()));
+        plumSapling = register(r, createSapling("plum_sapling", plumLeaves.getDefaultState()));
 
         // bookshelves
         bookshelfAcacia = register(r, createBookshelf("bookshelf_acacia"));
@@ -212,22 +212,21 @@ public class ModBlocks {
         barrierLight = register(r, createInvisibleLight("barrier_light"));
         barrierSolid = register(r, createInvisible("barrier_solid"));
 
-        FireBlock fireblock = (FireBlock) Blocks.FIRE;
-        fireblock.setFireInfo(bookshelfAcacia, 30, 20);
-        fireblock.setFireInfo(bookshelfBirch, 30, 20);
-        fireblock.setFireInfo(bookshelfDarkOak, 30, 20);
-        fireblock.setFireInfo(bookshelfJungle, 30, 20);
-        fireblock.setFireInfo(bookshelfSpruce, 30, 20);
-        fireblock.setFireInfo(cherryLeaves, 30, 60);
-        fireblock.setFireInfo(apricotLeaves, 30, 60);
-        fireblock.setFireInfo(pearLeaves, 30, 60);
-        fireblock.setFireInfo(plumLeaves, 30, 60);
-        fireblock.setFireInfo(crateAcacia, 5, 5);
-        fireblock.setFireInfo(crateBigOak, 5, 5);
-        fireblock.setFireInfo(crateBirch, 5, 5);
-        fireblock.setFireInfo(crateJungle, 5, 5);
-        fireblock.setFireInfo(crateOak, 5, 5);
-        fireblock.setFireInfo(crateSpruce, 5, 5);
+        ReflectionUtils.setFireInfo(bookshelfAcacia, 30, 20);
+        ReflectionUtils.setFireInfo(bookshelfBirch, 30, 20);
+        ReflectionUtils.setFireInfo(bookshelfDarkOak, 30, 20);
+        ReflectionUtils.setFireInfo(bookshelfJungle, 30, 20);
+        ReflectionUtils.setFireInfo(bookshelfSpruce, 30, 20);
+        ReflectionUtils.setFireInfo(cherryLeaves, 30, 60);
+        ReflectionUtils.setFireInfo(apricotLeaves, 30, 60);
+        ReflectionUtils.setFireInfo(pearLeaves, 30, 60);
+        ReflectionUtils.setFireInfo(plumLeaves, 30, 60);
+        ReflectionUtils.setFireInfo(crateAcacia, 5, 5);
+        ReflectionUtils.setFireInfo(crateBigOak, 5, 5);
+        ReflectionUtils.setFireInfo(crateBirch, 5, 5);
+        ReflectionUtils.setFireInfo(crateJungle, 5, 5);
+        ReflectionUtils.setFireInfo(crateOak, 5, 5);
+        ReflectionUtils.setFireInfo(crateSpruce, 5, 5);
     }
 
     public static void initItemBlocks(IForgeRegistry<Item> r) {

+ 18 - 15
src/main/java/me/km/blocks/ModTree.java

@@ -3,30 +3,33 @@ package me.km.blocks;
 import java.util.Random;
 import javax.annotation.Nullable;
 import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
 import net.minecraft.block.trees.Tree;
 import net.minecraft.world.gen.blockstateprovider.SimpleBlockStateProvider;
+import net.minecraft.world.gen.feature.BaseTreeFeatureConfig;
 import net.minecraft.world.gen.feature.ConfiguredFeature;
 import net.minecraft.world.gen.feature.Feature;
-import net.minecraft.world.gen.feature.TreeFeatureConfig;
+import net.minecraft.world.gen.feature.FeatureSpread;
+import net.minecraft.world.gen.feature.TwoLayerFeature;
 import net.minecraft.world.gen.foliageplacer.BlobFoliagePlacer;
-import net.minecraftforge.common.IPlantable;
+import net.minecraft.world.gen.trunkplacer.StraightTrunkPlacer;
 
 public class ModTree extends Tree {
-    private TreeFeatureConfig treeConfig = null;
+    private final BaseTreeFeatureConfig treeConfig;
 
-    @Nullable
-    @Override
-    protected ConfiguredFeature<TreeFeatureConfig, ?> getTreeFeature(Random r, boolean p_225546_2_) {
-        return Feature.NORMAL_TREE.withConfiguration(treeConfig);
+    public ModTree(BlockState leaves) {
+        treeConfig = new BaseTreeFeatureConfig.Builder(
+                new SimpleBlockStateProvider(Blocks.OAK_LOG.getDefaultState()),
+                new SimpleBlockStateProvider(leaves),
+                new BlobFoliagePlacer(FeatureSpread.func_242252_a(2),
+                        FeatureSpread.func_242252_a(0), 3),
+                new StraightTrunkPlacer(5, 2, 0),
+                new TwoLayerFeature(1, 0, 1)).setIgnoreVines().build();
     }
 
-    public void setConfig(BlockState wood, BlockState leaves, IPlantable sapling) {
-        treeConfig = (new TreeFeatureConfig.Builder(new SimpleBlockStateProvider(wood), new SimpleBlockStateProvider(leaves), new BlobFoliagePlacer(2, 0)))
-                .baseHeight(5)
-                .heightRandA(2)
-                .foliageHeight(3)
-                .ignoreVines()
-                .setSapling(sapling)
-                .build();
+    @Nullable
+    @Override
+    protected ConfiguredFeature<BaseTreeFeatureConfig, ?> getTreeFeature(Random r, boolean largeHive) {
+        return Feature.TREE.withConfiguration(treeConfig);
     }
 }

+ 1 - 1
src/main/java/me/km/blocks/cookingpot/BlockCookingPot.java

@@ -32,7 +32,7 @@ public class BlockCookingPot extends CauldronBlock implements ITileEntityProvide
     }
 
     @Override
-    public boolean hasTileEntity() {
+    public boolean hasTileEntity(BlockState state) {
         return true;
     }
 

+ 3 - 3
src/main/java/me/km/blocks/cookingpot/TileEntityCookingPot.java

@@ -43,9 +43,9 @@ public class TileEntityCookingPot extends TileEntity {
     }
 
     @Override
-    public void read(CompoundNBT com) {
-        super.read(com);
-        readItems(com);
+    public void read(BlockState state, CompoundNBT nbt) {
+        super.read(state, nbt);
+        readItems(nbt);
     }
 
     private void readItems(CompoundNBT com) {

+ 0 - 16
src/main/java/me/km/entities/EntityBlackBear.java

@@ -1,16 +0,0 @@
-package me.km.entities;
-
-import net.minecraft.entity.EntityType;
-import net.minecraft.entity.passive.PolarBearEntity;
-import net.minecraft.world.World;
-
-public class EntityBlackBear extends PolarBearEntity {
-    public EntityBlackBear(EntityType<EntityBlackBear> type, World w) {
-        super(ModEntities.BLACK_BEAR, w);
-    }
-
-    @Override
-    public EntityType<?> getType() {
-        return ModEntities.BLACK_BEAR;
-    }
-}

+ 0 - 16
src/main/java/me/km/entities/EntityBrownBear.java

@@ -1,16 +0,0 @@
-package me.km.entities;
-
-import net.minecraft.entity.EntityType;
-import net.minecraft.entity.passive.PolarBearEntity;
-import net.minecraft.world.World;
-
-public class EntityBrownBear extends PolarBearEntity {
-    public EntityBrownBear(EntityType<EntityBrownBear> type, World w) {
-        super(ModEntities.BROWN_BEAR, w);
-    }
-
-    @Override
-    public EntityType<?> getType() {
-        return ModEntities.BROWN_BEAR;
-    }
-}

+ 9 - 9
src/main/java/me/km/entities/EntityHuman.java

@@ -7,7 +7,8 @@ import net.minecraft.entity.CreatureEntity;
 import net.minecraft.entity.EntitySize;
 import net.minecraft.entity.EntityType;
 import net.minecraft.entity.Pose;
-import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.entity.ai.attributes.AttributeModifierMap;
+import net.minecraft.entity.ai.attributes.Attributes;
 import net.minecraft.entity.ai.goal.LookAtGoal;
 import net.minecraft.entity.ai.goal.LookRandomlyGoal;
 import net.minecraft.entity.ai.goal.SwimGoal;
@@ -133,7 +134,7 @@ public class EntityHuman extends CreatureEntity {
     }
 
     @Override
-    public void knockBack(Entity entityIn, float strength, double xRatio, double zRatio) {
+    public void applyKnockback(float strength, double ratioX, double ratioZ) {
     }
 
     @Override
@@ -162,12 +163,11 @@ public class EntityHuman extends CreatureEntity {
         this.goalSelector.addGoal(2, new LookRandomlyGoal(this));
     }
 
-    @Override
-    protected void registerAttributes() {
-        super.registerAttributes();
-        this.getAttributes().registerAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(1);
-        this.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0.1d);
-        this.getAttributes().registerAttribute(SharedMonsterAttributes.ATTACK_SPEED);
+    public static AttributeModifierMap.MutableAttribute getAttributes() {
+        return AttributeModifierMap.createMutableAttribute()
+                .createMutableAttribute(Attributes.ATTACK_DAMAGE, 1)
+                .createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.1)
+                .createMutableAttribute(Attributes.ATTACK_SPEED);
     }
 
     @Override
@@ -206,7 +206,7 @@ public class EntityHuman extends CreatureEntity {
 
     @Override
     public float getAIMoveSpeed() {
-        return (float) this.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getValue();
+        return (float) this.getAttribute(Attributes.MOVEMENT_SPEED).getValue();
     }
 
     @Override

+ 16 - 11
src/main/java/me/km/entities/EntityItemProjectile.java

@@ -4,7 +4,6 @@ import me.km.Server;
 import net.minecraft.block.Blocks;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
-import net.minecraft.entity.IProjectile;
 import net.minecraft.entity.item.ItemEntity;
 import net.minecraft.entity.projectile.ProjectileHelper;
 import net.minecraft.item.ItemStack;
@@ -16,9 +15,9 @@ import net.minecraft.util.math.EntityRayTraceResult;
 import net.minecraft.util.math.MathHelper;
 import net.minecraft.util.math.RayTraceContext;
 import net.minecraft.util.math.RayTraceResult;
-import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.math.vector.Vector3d;
 
-public class EntityItemProjectile extends ItemEntity implements IProjectile {
+public class EntityItemProjectile extends ItemEntity {
     private LivingEntity owner;
     private boolean hit = false;
     private final float damage;
@@ -45,13 +44,12 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile {
         float f1 = -MathHelper.sin((rotationPitchIn + pitchOffset) * ((float) Math.PI / 180.0f));
         float f2 = MathHelper.cos(rotationYawIn * ((float) Math.PI / 180.0f)) * MathHelper.cos(rotationPitchIn * ((float) Math.PI / 180.0f));
         shoot(f, f1, f2, velocity, inaccuracy);
-        Vec3d vec3d = thrower.getMotion();
-        this.setMotion(this.getMotion().add(vec3d.x, thrower.onGround ? 0.0D : vec3d.y, vec3d.z));
+        Vector3d vec3d = thrower.getMotion();
+        this.setMotion(this.getMotion().add(vec3d.x, thrower.isOnGround() ? 0.0D : vec3d.y, vec3d.z));
     }
 
-    @Override
     public void shoot(double x, double y, double z, float velocity, float inaccuracy) {
-        Vec3d vec3d = new Vec3d(x, y, z)
+        Vector3d vec3d = new Vector3d(x, y, z)
                 .normalize()
                 .add(rand.nextGaussian() * 0.0075 * inaccuracy, rand.nextGaussian() * 0.0075 * inaccuracy, rand.nextGaussian() * 0.0075 * inaccuracy)
                 .scale(velocity);
@@ -100,8 +98,7 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile {
             }
         }
 
-        RayTraceResult ray = ProjectileHelper.rayTrace(this, axisalignedbb,
-                (p) -> !p.isSpectator() && p.canBeCollidedWith() && p != this.ignoreEntity, RayTraceContext.BlockMode.OUTLINE, true);
+        RayTraceResult ray = ProjectileHelper.func_234618_a_(this, this::func_230298_a_);
         if(this.ignoreEntity != null && this.ignoreTime-- <= 0) {
             this.ignoreEntity = null;
         }
@@ -116,7 +113,7 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile {
             }
         }
 
-        Vec3d vec3d = this.getMotion();
+        Vector3d vec3d = this.getMotion();
         setRawPosition(getPosX() + vec3d.x, getPosY() + vec3d.y, getPosZ() + vec3d.z);
         float f = MathHelper.sqrt(horizontalMag(vec3d));
         this.rotationYaw = (float) (MathHelper.atan2(vec3d.x, vec3d.z) * (double) (180F / (float) Math.PI));
@@ -150,10 +147,18 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile {
 
         this.setMotion(vec3d.scale((double) f1));
         if(!this.hasNoGravity()) {
-            Vec3d vec3d1 = this.getMotion();
+            Vector3d vec3d1 = this.getMotion();
             this.setMotion(vec3d1.x, vec3d1.y - 0.03, vec3d1.z);
         }
 
         this.setPosition(getPosX(), getPosY(), getPosZ());
     }
+    
+    protected boolean func_230298_a_(Entity ent) {
+        if(!ent.isSpectator() && ent.isAlive() && ent.canBeCollidedWith()) {
+            Entity other = this.getItemThrower();
+            return other == null || ent != other || !other.isRidingSameEntity(ent);
+        }
+        return false;
+    }
 }

+ 1 - 1
src/main/java/me/km/entities/EntityNobody.java

@@ -21,7 +21,7 @@ public class EntityNobody extends LivingEntity {
     }
 
     @Override
-    public void knockBack(Entity entityIn, float strength, double xRatio, double zRatio) {
+    public void applyKnockback(float strength, double ratioX, double ratioZ) {
     }
 
     @Override

+ 3 - 18
src/main/java/me/km/entities/ModEntities.java

@@ -3,6 +3,7 @@ package me.km.entities;
 import me.km.KajetansMod;
 import net.minecraft.entity.EntityClassification;
 import net.minecraft.entity.EntityType;
+import net.minecraft.entity.ai.attributes.GlobalEntityTypeAttributes;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 import net.minecraftforge.fml.client.registry.RenderingRegistry;
@@ -20,16 +21,6 @@ public class ModEntities {
                     .size(0.5f, 0.5f)
                     .build(String.format("%s:nobody", KajetansMod.MODID))
                     .setRegistryName(KajetansMod.MODID, "nobody");
-    public static final EntityType<EntityBrownBear> BROWN_BEAR
-            = (EntityType<EntityBrownBear>) EntityType.Builder.create(EntityBrownBear::new, EntityClassification.CREATURE)
-                    .size(1.4f, 1.4f)
-                    .build(String.format("%s:bear/brownbear", KajetansMod.MODID))
-                    .setRegistryName(KajetansMod.MODID, "bear/brownbear");
-    public static final EntityType<EntityBlackBear> BLACK_BEAR
-            = (EntityType<EntityBlackBear>) EntityType.Builder.create(EntityBlackBear::new, EntityClassification.CREATURE)
-                    .size(1.4f, 1.4f)
-                    .build(String.format("%s:bear/blackbear", KajetansMod.MODID))
-                    .setRegistryName(KajetansMod.MODID, "bear/blackbear");
 
     public static void init(IForgeRegistry<EntityType<?>> r) {
         if(FMLEnvironment.dist == Dist.CLIENT) {
@@ -37,18 +28,12 @@ public class ModEntities {
         }
         r.register(HUMAN);
         r.register(NOBODY);
-        r.register(BROWN_BEAR);
-        r.register(BLACK_BEAR);
+        
+        GlobalEntityTypeAttributes.put(HUMAN, EntityHuman.getAttributes().create());
     }
 
     @OnlyIn(Dist.CLIENT)
     private static void initClient() {
-        RenderingRegistry.registerEntityRenderingHandler(BROWN_BEAR, (rm) -> {
-            return new RenderBrownBear(rm);
-        });
-        RenderingRegistry.registerEntityRenderingHandler(BLACK_BEAR, (rm) -> {
-            return new RenderBlackBear(rm);
-        });
         RenderingRegistry.registerEntityRenderingHandler(HUMAN, (rm) -> {
             return new RenderHuman(rm);
         });

+ 0 - 30
src/main/java/me/km/entities/RenderBlackBear.java

@@ -1,30 +0,0 @@
-package me.km.entities;
-
-import com.mojang.blaze3d.matrix.MatrixStack;
-import me.km.KajetansMod;
-import net.minecraft.client.renderer.entity.EntityRendererManager;
-import net.minecraft.client.renderer.entity.MobRenderer;
-import net.minecraft.client.renderer.entity.model.PolarBearModel;
-import net.minecraft.util.ResourceLocation;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-
-@OnlyIn(Dist.CLIENT)
-public class RenderBlackBear extends MobRenderer<EntityBlackBear, PolarBearModel<EntityBlackBear>> {
-    private static final ResourceLocation BLACK_BEAR_TEXTURE = new ResourceLocation(KajetansMod.MODID, "textures/entity/bear/blackbear.png");
-
-    public RenderBlackBear(EntityRendererManager erm) {
-        super(erm, new PolarBearModel<>(), 0.9F);
-    }
-
-    @Override
-    public ResourceLocation getEntityTexture(EntityBlackBear entity) {
-        return BLACK_BEAR_TEXTURE;
-    }
-
-    @Override
-    protected void preRenderCallback(EntityBlackBear ent, MatrixStack mStack, float partialTickTime) {
-        mStack.scale(1.2F, 1.2F, 1.2F);
-        super.preRenderCallback(ent, mStack, partialTickTime);
-    }
-}

+ 0 - 30
src/main/java/me/km/entities/RenderBrownBear.java

@@ -1,30 +0,0 @@
-package me.km.entities;
-
-import com.mojang.blaze3d.matrix.MatrixStack;
-import me.km.KajetansMod;
-import net.minecraft.client.renderer.entity.EntityRendererManager;
-import net.minecraft.client.renderer.entity.MobRenderer;
-import net.minecraft.client.renderer.entity.model.PolarBearModel;
-import net.minecraft.util.ResourceLocation;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-
-@OnlyIn(Dist.CLIENT)
-public class RenderBrownBear extends MobRenderer<EntityBrownBear, PolarBearModel<EntityBrownBear>> {
-    private static final ResourceLocation BLACK_BEAR_TEXTURE = new ResourceLocation(KajetansMod.MODID, "textures/entity/bear/brownbear.png");
-
-    public RenderBrownBear(EntityRendererManager erm) {
-        super(erm, new PolarBearModel<>(), 0.9F);
-    }
-
-    @Override
-    public ResourceLocation getEntityTexture(EntityBrownBear entity) {
-        return BLACK_BEAR_TEXTURE;
-    }
-
-    @Override
-    protected void preRenderCallback(EntityBrownBear ent, MatrixStack mStack, float partialTickTime) {
-        mStack.scale(1.2F, 1.2F, 1.2F);
-        super.preRenderCallback(ent, mStack, partialTickTime);
-    }
-}

+ 6 - 6
src/main/java/me/km/entities/RenderHuman.java

@@ -2,7 +2,6 @@ package me.km.entities;
 
 import com.mojang.blaze3d.matrix.MatrixStack;
 import net.minecraft.client.renderer.IRenderTypeBuffer;
-import net.minecraft.client.renderer.Vector3f;
 import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.renderer.entity.LivingRenderer;
 import net.minecraft.client.renderer.entity.layers.ArrowLayer;
@@ -22,7 +21,8 @@ import net.minecraft.util.Hand;
 import net.minecraft.util.HandSide;
 import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.MathHelper;
-import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.math.vector.Vector3d;
+import net.minecraft.util.math.vector.Vector3f;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
@@ -57,8 +57,8 @@ public class RenderHuman extends LivingRenderer<EntityHuman, ModelHuman> {
     }
 
     @Override
-    public Vec3d getRenderOffset(EntityHuman ent, float p_225627_2_) {
-        return ent.isCrouching() ? new Vec3d(0.0D, -0.125D, 0.0D) : super.getRenderOffset(ent, p_225627_2_);
+    public Vector3d getRenderOffset(EntityHuman ent, float p_225627_2_) {
+        return ent.isCrouching() ? new Vector3d(0.0D, -0.125D, 0.0D) : super.getRenderOffset(ent, p_225627_2_);
     }
 
     private void setModelVisibilities(EntityHuman ent) {
@@ -141,8 +141,8 @@ public class RenderHuman extends LivingRenderer<EntityHuman, ModelHuman> {
                 mStack.rotate(Vector3f.XP.rotationDegrees(f2 * (-90.0F - ent.rotationPitch)));
             }
 
-            Vec3d vec3d = ent.getLook(partialTicks);
-            Vec3d vec3d1 = ent.getMotion();
+            Vector3d vec3d = ent.getLook(partialTicks);
+            Vector3d vec3d1 = ent.getMotion();
             double d0 = Entity.horizontalMag(vec3d1);
             double d1 = Entity.horizontalMag(vec3d);
             if(d0 > 0.0D && d1 > 0.0D) {

+ 1 - 1
src/main/java/me/km/inventory/CustomContainer.java

@@ -58,7 +58,7 @@ public class CustomContainer extends Container {
     public static void openForPlayer(ServerPlayerEntity p, ModInventory inv, String title, Script sc) {
         // taken from ServerPlayerEntity.openContainer
         if(p.isSpectator()) {
-            p.sendStatusMessage((new TranslationTextComponent("container.spectatorCantOpen")).applyTextStyle(TextFormatting.RED), true);
+            p.sendStatusMessage((new TranslationTextComponent("container.spectatorCantOpen")).mergeStyle(TextFormatting.RED), true);
             return;
         }
         if(p.openContainer != p.container) {

+ 3 - 3
src/main/java/me/km/items/ItemColoredSoup.java

@@ -96,13 +96,13 @@ public class ItemColoredSoup extends ItemFood {
             case 0:
                 return "";
             case 1:
-                return TextFormatting.GRAY + LanguageMap.getInstance().translateKey(list.getString(0));
+                return TextFormatting.GRAY + LanguageMap.getInstance().func_230503_a_(list.getString(0));
             default:
                 StringBuilder sb = new StringBuilder(TextFormatting.GRAY.toString());
-                sb.append(LanguageMap.getInstance().translateKey(list.getString(0)));
+                sb.append(LanguageMap.getInstance().func_230503_a_(list.getString(0)));
                 for(int i = 1; i < list.size(); i++) {
                     sb.append(", ");
-                    sb.append(LanguageMap.getInstance().translateKey(list.getString(i)));
+                    sb.append(LanguageMap.getInstance().func_230503_a_(list.getString(i)));
                 }
                 return sb.toString();
         }

+ 8 - 3
src/main/java/me/km/items/ItemKey.java

@@ -6,6 +6,7 @@ import net.minecraft.item.IItemTier;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemGroup;
 import net.minecraft.item.ItemStack;
+import net.minecraft.util.text.IFormattableTextComponent;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.TextFormatting;
 import net.minecraft.world.World;
@@ -27,10 +28,14 @@ public class ItemKey extends Item {
     @OnlyIn(Dist.CLIENT)
     @Override
     public void addInformation(ItemStack stack, World w, List<ITextComponent> lore, ITooltipFlag flag) {
-        if(stack.hasDisplayName()) {
-            lore.get(0).applyTextStyle(TextFormatting.GREEN);
+        if(stack.hasDisplayName() && !lore.isEmpty()) {
+            if(lore.get(0) instanceof IFormattableTextComponent) {
+                ((IFormattableTextComponent) lore.get(0)).mergeStyle(TextFormatting.GREEN);
+            }
         } else {
-            lore.get(0).applyTextStyle(TextFormatting.RED);
+            if(lore.get(0) instanceof IFormattableTextComponent) {
+                ((IFormattableTextComponent) lore.get(0)).mergeStyle(TextFormatting.RED);
+            }
         }
     }
 }

+ 0 - 10
src/main/java/me/km/items/ItemSling.java

@@ -13,7 +13,6 @@ import net.minecraft.stats.Stats;
 import net.minecraft.util.ActionResult;
 import net.minecraft.util.ActionResultType;
 import net.minecraft.util.Hand;
-import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.SoundCategory;
 import net.minecraft.util.SoundEvents;
 import net.minecraft.world.World;
@@ -21,15 +20,6 @@ import net.minecraft.world.World;
 public class ItemSling extends Item {
     public ItemSling(int maxDamage) {
         super(new Properties().defaultMaxDamage(maxDamage).group(ItemGroup.COMBAT));
-
-        this.addPropertyOverride(new ResourceLocation("pull"), (stack, w, ent) -> {
-            if(ent == null) {
-                return 0.0f;
-            } else {
-                return ent.getActiveItemStack().getItem() != ModItems.sling ? 0.0f : (stack.getUseDuration() - ent.getItemInUseCount()) / 20.0F;
-            }
-        });
-        this.addPropertyOverride(new ResourceLocation("pulling"), (stack, w, ent) -> ent != null && ent.isHandActive() && ent.getActiveItemStack() == stack ? 1.0f : 0.0f);
     }
 
     private ItemStack findAmmo(PlayerEntity p) {

+ 5 - 0
src/main/java/me/km/items/ModArmorMaterial.java

@@ -75,4 +75,9 @@ public enum ModArmorMaterial implements IArmorMaterial {
     public float getToughness() {
         return this.toughness;
     }
+
+    @Override
+    public float getKnockbackResistance() {
+        return 0.0f;
+    }
 }

+ 7 - 7
src/main/java/me/km/items/ModItems.java

@@ -176,7 +176,7 @@ public class ModItems {
     public static Item herbGold;
     public static Item herbBreathing;
     public static Item herbFire;
-    
+
     // berry
     public static Item berryBeast;
     public static Item berryCloud;
@@ -201,8 +201,8 @@ public class ModItems {
         return new ModItemAxe(tier, attackDamageIn, attackSpeedIn, (new Item.Properties()).group(ItemGroup.TOOLS));
     }
 
-    private static Item newHoe(IItemTier tier, float speed) {
-        return new HoeItem(tier, speed, (new Item.Properties()).group(ItemGroup.TOOLS));
+    private static Item newHoe(IItemTier tier, int attackDamage, float speed) {
+        return new HoeItem(tier, attackDamage, speed, (new Item.Properties()).group(ItemGroup.TOOLS));
     }
 
     private static Item newStick(IItemTier tier) {
@@ -237,7 +237,7 @@ public class ModItems {
         return new Item(new Properties().group(ItemGroup.FOOD).food(
                 new Food.Builder().hunger(2).saturation(0.1F).setAlwaysEdible().fastToEat().build()));
     }
-    
+
     private static Item newBerry() {
         return new Item(new Properties().group(ItemGroup.FOOD).food(
                 new Food.Builder().hunger(2).saturation(0.1F).setAlwaysEdible().fastToEat().build()));
@@ -267,13 +267,13 @@ public class ModItems {
         copperShovel = register(r, newShovel(ModItemTier.COPPER), "copper_shovel");
         copperPickaxe = register(r, newPickaxe(ModItemTier.COPPER), "copper_pickaxe");
         copperAxe = register(r, newAxe(ModItemTier.COPPER, 7, -3.1f), "copper_axe");
-        copperHoe = register(r, newHoe(ModItemTier.COPPER, -2.0f), "copper_hoe");
+        copperHoe = register(r, newHoe(ModItemTier.COPPER, -1, -2.0f), "copper_hoe");
 
         bronzeSword = register(r, newSword(ModItemTier.BRONZE), "bronze_sword");
         bronzeShovel = register(r, newShovel(ModItemTier.BRONZE), "bronze_shovel");
         bronzePickaxe = register(r, newPickaxe(ModItemTier.BRONZE), "bronze_pickaxe");
         bronzeAxe = register(r, newAxe(ModItemTier.BRONZE, 8, -3.0f), "bronze_axe");
-        bronzeHoe = register(r, newHoe(ModItemTier.BRONZE, -1.0f), "bronze_hoe");
+        bronzeHoe = register(r, newHoe(ModItemTier.BRONZE, -2, -1.0f), "bronze_hoe");
 
         sling = register(r, new ItemSling(192), "sling");
 
@@ -406,7 +406,7 @@ public class ModItems {
         herbGold = register(r, newHerb(), "herb_gold");
         herbBreathing = register(r, newHerb(), "herb_breathing");
         herbFire = register(r, newHerb(), "herb_fire");
-        
+
         // berries
         berryBeast = register(r, newBerry(), "berry_beast");
         berryCloud = register(r, newBerry(), "berry_cloud");

+ 14 - 13
src/main/java/me/km/networking/CustomInventoryScreen.java

@@ -1,5 +1,6 @@
 package me.km.networking;
 
+import com.mojang.blaze3d.matrix.MatrixStack;
 import com.mojang.blaze3d.systems.RenderSystem;
 import me.km.KajetansMod;
 import me.km.inventory.CustomContainer;
@@ -27,26 +28,26 @@ public class CustomInventoryScreen extends ContainerScreen<CustomContainer> impl
     }
 
     @Override
-    public void render(int mouseX, int mouseY, float partialTicks) {
-        this.renderBackground();
-        super.render(mouseX, mouseY, partialTicks);
-        this.renderHoveredToolTip(mouseX, mouseY);
+    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
+        this.renderBackground(matrixStack);
+        super.render(matrixStack, mouseX, mouseY, partialTicks);
+        this.renderHoveredTooltip(matrixStack, mouseX, mouseY);
     }
 
     @Override
-    protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
-        this.font.drawString(title.getFormattedText(), 8.0f, 6.0f, 4210752);
-        this.font.drawString(playerInventory.getDisplayName().getFormattedText(), 8.0f, ySize - 94, 4210752);
+    protected void drawGuiContainerForegroundLayer(MatrixStack matrixStack, int x, int y) {
+        this.font.drawString(matrixStack, title.getString(), 8.0f, 6.0f, 4210752);
+        this.font.drawString(matrixStack, playerInventory.getDisplayName().getString(), 8.0f, ySize - 94, 4210752);
     }
 
     @Override
-    protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY) {
+    protected void drawGuiContainerBackgroundLayer(MatrixStack matrixStack, float partialTicks, int ix, int iy) {
         RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
-        minecraft.getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
+        this.minecraft.getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
         int i = (width - xSize) / 2;
         int j = (height - ySize) / 2;
-        blit(i, j, 0, 0, this.xSize, inventoryRows * 18 + 17);
-        blit(i, j + inventoryRows * 18 + 17, 0, 126, xSize, 96);
+        blit(matrixStack, i, j, 0, 0, xSize, inventoryRows * 18 + 17);
+        blit(matrixStack, i, j + inventoryRows * 18 + 17, 0, 126, xSize, 96);
 
         i += 7;
         j += 17;
@@ -55,9 +56,9 @@ public class CustomInventoryScreen extends ContainerScreen<CustomContainer> impl
         for(int x = 0; x < 9; x++) {
             for(int y = 0; y < inventoryRows; y++) {
                 if(base.shouldRenderOverlay(x, y)) {
-                    blit(i + 18 * x, j + 18 * y, 0, 0, 18, 18, 64, 64);
+                    blit(matrixStack, i + 18 * x, j + 18 * y, 0, 0, 18, 18, 64, 64);
                 } else if(base.shouldRenderDarker(x, y)) {
-                    blit(i + 18 * x, j + 18 * y, 18, 0, 18, 18, 64, 64);
+                    blit(matrixStack, i + 18 * x, j + 18 * y, 18, 0, 18, 18, 64, 64);
                 }
             }
         }

+ 3 - 2
src/main/java/me/km/networking/ItemStackDisplayGui.java

@@ -1,5 +1,6 @@
 package me.km.networking;
 
+import com.mojang.blaze3d.matrix.MatrixStack;
 import com.mojang.blaze3d.systems.RenderSystem;
 import me.km.utils.ClientReflectionUtils;
 import me.km.utils.Mapper;
@@ -50,7 +51,7 @@ public class ItemStackDisplayGui extends AbstractGui {
         }
     }
 
-    public void paint(KeyManager km) {
+    public void paint(MatrixStack matrixStack, KeyManager km) {
         if(inactive) {
             return;
         }
@@ -66,7 +67,7 @@ public class ItemStackDisplayGui extends AbstractGui {
         mc.getTextureManager().bindTexture(WIDGETS_TEX_PATH);
         int oldBlitOffset = this.getBlitOffset();
         setBlitOffset(-90);
-        blit(screenWidth, y, 0, 0, 182, 22);
+        blit(matrixStack, screenWidth, y, 0, 0, 182, 22);
         setBlitOffset(oldBlitOffset);
         
         y += 3;

+ 1 - 1
src/main/java/me/km/networking/KeyManager.java

@@ -26,7 +26,7 @@ public class KeyManager {
     }
 
     public String getKeyDescription(int index) {
-        return functionKeys[index].getLocalizedName();
+        return functionKeys[index].func_238171_j_().getString();
     }
 
     private KeyBinding register(int id, int key) {

+ 7 - 6
src/main/java/me/km/networking/PlayerDisplayGui.java

@@ -1,5 +1,6 @@
 package me.km.networking;
 
+import com.mojang.blaze3d.matrix.MatrixStack;
 import com.mojang.blaze3d.systems.RenderSystem;
 import java.util.ArrayList;
 import java.util.TreeMap;
@@ -93,7 +94,7 @@ public class PlayerDisplayGui extends AbstractGui {
         strings.clear();
     }
 
-    public void paint() {
+    public void paint(MatrixStack matrixStack) {
         if(strings.isEmpty()) {
             return;
         }
@@ -108,21 +109,21 @@ public class PlayerDisplayGui extends AbstractGui {
             width = Math.max(data.getWidth(), width);
         }
 
-        fill(0, 0, width + 4, height, 1342177280);
+        fill(matrixStack, 0, 0, width + 4, height, 1342177280);
 
         String s;
         for(LineData data : strings.values()) {
             x = 2;
             for(int i = 0; i < data.list.size(); i++) {
                 s = data.list.get(i);
-                mc.fontRenderer.drawString(s, x, y + 1, 0xFFFFFF);
+                mc.fontRenderer.drawString(matrixStack, s, x, y + 1, 0xFFFFFF);
                 if(!s.isEmpty()) {
                     x += mc.fontRenderer.getStringWidth(s);
                 } else {
                     x--;
                 }
                 if(i < data.icons.size()) {
-                    x += paintIcons(data.icons.get(i), x, y);
+                    x += paintIcons(matrixStack, data.icons.get(i), x, y);
                 }
             }
             y += data.getHeight();
@@ -133,7 +134,7 @@ public class PlayerDisplayGui extends AbstractGui {
         mc.getTextureManager().bindTexture(res);
     }
 
-    private int paintIcons(IconStorage is, int x, int y) {
+    private int paintIcons(MatrixStack matrixStack, IconStorage is, int x, int y) {
         RenderSystem.enableBlend();
         RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         bind(CUSTOM_ICONS);
@@ -143,7 +144,7 @@ public class PlayerDisplayGui extends AbstractGui {
         int offX = icon.getOffsetX();
         int offY = icon.getOffsetY();
         for(int i = 0; i < is.count; i++) {
-            blit(x + width * i - i, y, offX, offY, width, height);
+            blit(matrixStack, x + width * i - i, y, offX, offY, width, height);
         }
         RenderSystem.disableBlend();
         return is.getWidth();

+ 6 - 5
src/main/java/me/km/networking/PlayerHeadGui.java

@@ -1,5 +1,6 @@
 package me.km.networking;
 
+import com.mojang.blaze3d.matrix.MatrixStack;
 import com.mojang.blaze3d.systems.RenderSystem;
 import java.util.TreeMap;
 import net.minecraft.client.Minecraft;
@@ -26,11 +27,11 @@ public class PlayerHeadGui extends AbstractGui {
             this.rl = rl;
         }
 
-        public void paint(Minecraft mc) {
+        public void paint(Minecraft mc, MatrixStack matrixStack) {
             RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
             mc.getTextureManager().bindTexture(rl);
-            AbstractGui.blit(x, y, 8 * scale, 8 * scale, 8.0f, 8.0f, 8, 8, 64, 64);
-            AbstractGui.blit(x, y, 8 * scale, 8 * scale, 40.0f, 8.0f, 8, 8, 64, 64);
+            AbstractGui.blit(matrixStack, x, y, 8 * scale, 8 * scale, 8.0f, 8.0f, 8, 8, 64, 64);
+            AbstractGui.blit(matrixStack, x, y, 8 * scale, 8 * scale, 40.0f, 8.0f, 8, 8, 64, 64);
         }
     }
 
@@ -57,7 +58,7 @@ public class PlayerHeadGui extends AbstractGui {
         data.clear();
     }
 
-    public void paint() {
-        data.values().forEach(head -> head.paint(mc));
+    public void paint(MatrixStack matrixStack) {
+        data.values().forEach(head -> head.paint(mc, matrixStack));
     }
 }

+ 52 - 77
src/main/java/me/km/networking/StatusDisplayGui.java

@@ -1,5 +1,6 @@
 package me.km.networking;
 
+import com.mojang.blaze3d.matrix.MatrixStack;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.TreeMap;
@@ -12,153 +13,127 @@ import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
 @OnlyIn(Dist.CLIENT)
-public class StatusDisplayGui extends AbstractGui
-{
+public class StatusDisplayGui extends AbstractGui {
     public final static StatusDisplayGui INSTANCE = new StatusDisplayGui(Minecraft.getInstance());
 
-    private class LineData implements Comparable<LineData>
-    {
+    private class LineData implements Comparable<LineData> {
         private int time;
         private final String text;
-        
-        public LineData(int time, String text)
-        {
+
+        public LineData(int time, String text) {
             this.time = time;
             int index = text.indexOf('#');
-            if(index != -1)
-            {
-                this.text = text.substring(0, index) + LanguageMap.getInstance().translateKey(text.substring(index + 1));
-            }
-            else
-            {
+            if(index != -1) {
+                this.text = text.substring(0, index) + LanguageMap.getInstance().func_230503_a_(text.substring(index + 1));
+            } else {
                 this.text = text;
             }
         }
-        
-        public String getText()
-        {
+
+        public String getText() {
             return text;
         }
-        
-        public String getTimeText()
-        {
-            if(time == Integer.MAX_VALUE)
-            {
+
+        public String getTimeText() {
+            if(time == Integer.MAX_VALUE) {
                 return "";
             }
             return (time / 20) + "s ";
         }
-        
-        public int getTimeWidth()
-        {
+
+        public int getTimeWidth() {
             return time == Integer.MAX_VALUE ? 0 : mc.fontRenderer.getStringWidth(getTimeText());
         }
-        
-        public int getTextWidth()
-        {
+
+        public int getTextWidth() {
             return mc.fontRenderer.getStringWidth(getText());
         }
 
         @Override
-        public int compareTo(LineData o) 
-        {
+        public int compareTo(LineData o) {
             return -Integer.compare(time, o.time);
         }
     }
-    
+
     private final TreeMap<Integer, LineData> strings;
     private final Minecraft mc;
-    
-    public StatusDisplayGui(Minecraft mc)
-    {
+
+    public StatusDisplayGui(Minecraft mc) {
         this.mc = mc;
-        this.strings = new TreeMap<>(); 
+        this.strings = new TreeMap<>();
     }
-    
-    public void tick()
-    {
-        strings.entrySet().removeIf(e -> 
-        {
-            if(e.getValue().time < Integer.MAX_VALUE)
-            {
+
+    public void tick() {
+        strings.entrySet().removeIf(e
+                -> {
+            if(e.getValue().time < Integer.MAX_VALUE) {
                 e.getValue().time--;
-                if(e.getValue().time < 0)
-                {
+                if(e.getValue().time < 0) {
                     return true;
                 }
             }
             return false;
         });
     }
-    
-    public void add(int i, int time, String s)
-    {
+
+    public void add(int i, int time, String s) {
         strings.put(i, new LineData(time, s));
     }
-    
-    public void remove(int i)
-    {
+
+    public void remove(int i) {
         strings.remove(i);
     }
-    
-    public void clear()
-    {
+
+    public void clear() {
         strings.clear();
     }
 
-    public void paint()
-    {
+    public void paint(MatrixStack matrixStack) {
         Collection<EffectInstance> collection = this.mc.player.getActivePotionEffects();
-        if(strings.isEmpty() && collection.isEmpty())
-        {
+        if(strings.isEmpty() && collection.isEmpty()) {
             return;
         }
         // getting data
         LinkedList<LineData> list = new LinkedList<>(strings.values());
         EffectInstance e;
-        collection.forEach(effect -> 
-        {
+        collection.forEach(effect
+                -> {
             StringBuilder sb = new StringBuilder();
-            if(effect.getPotion().isBeneficial())
-            {
+            if(effect.getPotion().isBeneficial()) {
                 sb.append(TextFormatting.GREEN);
-            }
-            else
-            {
+            } else {
                 sb.append(TextFormatting.RED);
             }
-            sb.append(LanguageMap.getInstance().translateKey(effect.getEffectName()));
+            sb.append(LanguageMap.getInstance().func_230503_a_(effect.getEffectName()));
             list.add(new LineData(effect.getDuration(), sb.toString()));
         });
         // sorting by time
         list.sort(null);
-        
+
         int lineHeight = mc.fontRenderer.FONT_HEIGHT;
         int height = 4 + lineHeight * (strings.size() + collection.size());
-        
+
         int maxTextWidth = 0;
         int maxTimeWidth = 0;
-        
-        for(LineData data : list)
-        {
+
+        for(LineData data : list) {
             maxTextWidth = Math.max(data.getTextWidth(), maxTextWidth);
             maxTimeWidth = Math.max(data.getTimeWidth(), maxTimeWidth);
         }
-        
+
         int screenWidth = mc.getMainWindow().getScaledWidth();
-        
+
         int x = screenWidth - maxTextWidth - maxTimeWidth - 4;
         int y = 2;
-        
-        fill(x, 0, screenWidth, height, 1342177280);
-        
+
+        fill(matrixStack, x, 0, screenWidth, height, 1342177280);
+
         x += 2;
         String time;
 
-        for(LineData data : list)
-        {
+        for(LineData data : list) {
             time = data.getTimeText();
-            mc.fontRenderer.drawString(time + data.getText(), x + maxTimeWidth - mc.fontRenderer.getStringWidth(time), y + 1, 0xFFFFFF);
+            mc.fontRenderer.drawString(matrixStack, time + data.getText(), x + maxTimeWidth - mc.fontRenderer.getStringWidth(time), y + 1, 0xFFFFFF);
             y += lineHeight;
         }
     }

+ 0 - 71
src/main/java/me/km/overrides/ModCapeLayer.java

@@ -1,71 +0,0 @@
-package me.km.overrides;
-
-import com.mojang.blaze3d.matrix.MatrixStack;
-import com.mojang.blaze3d.vertex.IVertexBuilder;
-import net.minecraft.client.entity.player.AbstractClientPlayerEntity;
-import net.minecraft.client.renderer.IRenderTypeBuffer;
-import net.minecraft.client.renderer.RenderType;
-import net.minecraft.client.renderer.Vector3f;
-import net.minecraft.client.renderer.entity.IEntityRenderer;
-import net.minecraft.client.renderer.entity.layers.CapeLayer;
-import net.minecraft.client.renderer.entity.model.PlayerModel;
-import net.minecraft.client.renderer.texture.OverlayTexture;
-import net.minecraft.entity.player.PlayerModelPart;
-import net.minecraft.inventory.EquipmentSlotType;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.Items;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.util.math.MathHelper;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-
-@OnlyIn(Dist.CLIENT)
-public class ModCapeLayer extends CapeLayer {
-    public ModCapeLayer(IEntityRenderer<AbstractClientPlayerEntity, PlayerModel<AbstractClientPlayerEntity>> pRenderer) {
-        super(pRenderer);
-    }
-
-    @Override
-    public void render(MatrixStack mStack, IRenderTypeBuffer buffer, int packedLightIn, AbstractClientPlayerEntity p, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch) {
-        if(p.hasPlayerInfo() && !p.isInvisible() && p.isWearing(PlayerModelPart.CAPE)) {
-            ItemStack chestStack = p.getItemStackFromSlot(EquipmentSlotType.CHEST);
-            if(chestStack.getItem() != Items.ELYTRA) {
-                ResourceLocation rl = PlayerCapeLoader.INSTANCE.getTexture(p.getUniqueID());
-                if(rl == null) {
-                    return;
-                }
-
-                mStack.push();
-                mStack.translate(0.0, 0.0, 0.125);
-                double d0 = MathHelper.lerp(partialTicks, p.prevChasingPosX, p.chasingPosX) - MathHelper.lerp(partialTicks, p.prevPosX, p.getPosX());
-                double d1 = MathHelper.lerp(partialTicks, p.prevChasingPosY, p.chasingPosY) - MathHelper.lerp(partialTicks, p.prevPosY, p.getPosY());
-                double d2 = MathHelper.lerp(partialTicks, p.prevChasingPosZ, p.chasingPosZ) - MathHelper.lerp(partialTicks, p.prevPosZ, p.getPosZ());
-                float f = p.prevRenderYawOffset + (p.renderYawOffset - p.prevRenderYawOffset);
-                double d3 = MathHelper.sin(f * ((float) Math.PI / 180f));
-                double d4 = -MathHelper.cos(f * ((float) Math.PI / 180f));
-                float f1 = (float) d1 * 10.0f;
-                f1 = MathHelper.clamp(f1, -6.0f, 32.0f);
-                float f2 = (float) (d0 * d3 + d2 * d4) * 100.0f;
-                f2 = MathHelper.clamp(f2, 0.0f, 150.0f);
-                float f3 = (float) (d0 * d4 - d2 * d3) * 100.0f;
-                f3 = MathHelper.clamp(f3, -20.0f, 20.0f);
-                if(f2 < 0.0f) {
-                    f2 = 0.0f;
-                }
-
-                float f4 = MathHelper.lerp(partialTicks, p.prevCameraYaw, p.cameraYaw);
-                f1 = f1 + MathHelper.sin(MathHelper.lerp(partialTicks, p.prevDistanceWalkedModified, p.distanceWalkedModified) * 6.0f) * 32.0f * f4;
-                if(p.isCrouching()) {
-                    f1 += 25.0f;
-                }
-
-                mStack.rotate(Vector3f.XP.rotationDegrees(6.0f + f2 / 2.0f + f1));
-                mStack.rotate(Vector3f.ZP.rotationDegrees(f3 / 2.0f));
-                mStack.rotate(Vector3f.YP.rotationDegrees(180.0f - f3 / 2.0f));
-                IVertexBuilder ivertexbuilder = buffer.getBuffer(RenderType.getEntitySolid(rl));
-                this.getEntityModel().renderCape(mStack, ivertexbuilder, packedLightIn, OverlayTexture.NO_OVERLAY);
-                mStack.pop();
-            }
-        }
-    }
-}

+ 91 - 179
src/main/java/me/km/overrides/ModPlayerList.java

@@ -2,219 +2,115 @@ package me.km.overrides;
 
 import com.google.common.collect.Lists;
 import com.mojang.authlib.GameProfile;
-import io.netty.buffer.Unpooled;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
 import me.km.Server;
 import me.km.utils.ReflectionUtils;
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.EntityType;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.nbt.CompoundNBT;
-import net.minecraft.network.NetworkManager;
-import net.minecraft.network.PacketBuffer;
-import net.minecraft.network.play.ServerPlayNetHandler;
 import net.minecraft.network.play.server.SChangeGameStatePacket;
-import net.minecraft.network.play.server.SCustomPayloadPlayPacket;
-import net.minecraft.network.play.server.SHeldItemChangePacket;
-import net.minecraft.network.play.server.SJoinGamePacket;
-import net.minecraft.network.play.server.SPlayEntityEffectPacket;
-import net.minecraft.network.play.server.SPlayerAbilitiesPacket;
-import net.minecraft.network.play.server.SPlayerListItemPacket;
+import net.minecraft.network.play.server.SPlaySoundEffectPacket;
 import net.minecraft.network.play.server.SRespawnPacket;
 import net.minecraft.network.play.server.SServerDifficultyPacket;
 import net.minecraft.network.play.server.SSetExperiencePacket;
-import net.minecraft.network.play.server.SSpawnPositionPacket;
-import net.minecraft.network.play.server.STagsListPacket;
-import net.minecraft.network.play.server.SUpdateRecipesPacket;
-import net.minecraft.potion.EffectInstance;
+import net.minecraft.network.play.server.SWorldSpawnChangedPacket;
 import net.minecraft.server.dedicated.DedicatedPlayerList;
 import net.minecraft.server.dedicated.DedicatedServer;
 import net.minecraft.server.management.DemoPlayerInteractionManager;
 import net.minecraft.server.management.PlayerInteractionManager;
 import net.minecraft.server.management.PlayerList;
-import net.minecraft.server.management.PlayerProfileCache;
+import net.minecraft.tags.BlockTags;
+import net.minecraft.util.SoundCategory;
+import net.minecraft.util.SoundEvents;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.math.MathHelper;
+import net.minecraft.util.math.vector.Vector3d;
+import net.minecraft.util.registry.DynamicRegistries;
+import net.minecraft.util.text.ChatType;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.TranslationTextComponent;
-import net.minecraft.world.GameRules;
 import net.minecraft.world.IWorld;
+import net.minecraft.world.biome.BiomeManager;
 import net.minecraft.world.server.ServerWorld;
-import net.minecraft.world.dimension.DimensionType;
-import net.minecraft.world.storage.WorldInfo;
-import org.apache.logging.log4j.LogManager;
+import net.minecraft.world.storage.IWorldInfo;
+import net.minecraft.world.storage.PlayerData;
 
 public final class ModPlayerList extends DedicatedPlayerList {
     private final DedicatedServer server;
     private final List<ServerPlayerEntity> players;
     private final Map<UUID, ServerPlayerEntity> uuidToPlayerMap;
 
-    public ModPlayerList(DedicatedServer server) {
-        super(server);
+    public ModPlayerList(DedicatedServer server, DynamicRegistries.Impl registries, PlayerData pd) {
+        super(server, registries, pd);
         this.server = server;
         this.players = getPlayers();
         this.uuidToPlayerMap = ReflectionUtils.getFieldValue(Map.class, PlayerList.class, this, "field_177454_f");
     }
 
-    @Override
-    public void initializeConnectionToPlayer(NetworkManager netManager, ServerPlayerEntity p) {
-        GameProfile profile = p.getGameProfile();
-        PlayerProfileCache cache = this.server.getPlayerProfileCache();
-        cache.addEntry(profile);
-        CompoundNBT compoundnbt = this.readPlayerDataFromFile(p);
-
-        ServerWorld sw = this.server.getWorld(p.dimension);
-        if(sw == null) {
-            p.dimension = DimensionType.OVERWORLD;
-            sw = this.server.getWorld(p.dimension);
-            p.setPosition(sw.getWorldInfo().getSpawnX(), sw.getWorldInfo().getSpawnY(), sw.getWorldInfo().getSpawnZ());
-        }
-        p.setWorld(sw);
-        p.interactionManager.setWorld((ServerWorld) p.world);
-        String s1 = "local";
-        if(netManager.getRemoteAddress() != null) {
-            s1 = netManager.getRemoteAddress().toString();
-        }
-
-        LogManager.getLogger().info("{}[{}] logged in with entity id {} at ({}, {}, {})", p.getName().getString(), s1, p.getEntityId(), p.getPosX(), p.getPosY(), p.getPosZ());
-        WorldInfo wi = sw.getWorldInfo();
-        setPlayerGameTypeBasedOnOther(p, null, sw);
-        ServerPlayNetHandler spnh = new ServerPlayNetHandler(server, netManager, p);
-        net.minecraftforge.fml.network.NetworkHooks.sendMCRegistryPackets(netManager, "PLAY_TO_CLIENT");
-        net.minecraftforge.fml.network.NetworkHooks.sendDimensionDataPacket(netManager, p);
-        GameRules gamerules = sw.getGameRules();
-        spnh.sendPacket(new SJoinGamePacket(p.getEntityId(), p.interactionManager.getGameType(), WorldInfo.byHashing(wi.getSeed()), wi.isHardcore(), sw.dimension.getType(), this.getMaxPlayers(), wi.getGenerator(), getViewDistance(), gamerules.getBoolean(GameRules.REDUCED_DEBUG_INFO), !gamerules.getBoolean(GameRules.DO_IMMEDIATE_RESPAWN)));
-        spnh.sendPacket(new SCustomPayloadPlayPacket(SCustomPayloadPlayPacket.BRAND, (new PacketBuffer(Unpooled.buffer())).writeString(this.getServer().getServerModName())));
-        spnh.sendPacket(new SServerDifficultyPacket(wi.getDifficulty(), wi.isDifficultyLocked()));
-        spnh.sendPacket(new SPlayerAbilitiesPacket(p.abilities));
-        spnh.sendPacket(new SHeldItemChangePacket(p.inventory.currentItem));
-        spnh.sendPacket(new SUpdateRecipesPacket(server.getRecipeManager().getRecipes()));
-        spnh.sendPacket(new STagsListPacket(server.getNetworkTagManager()));
-        this.updatePermissionLevel(p);
-        p.getStats().markAllDirty();
-        p.getRecipeBook().init(p);
-        this.sendScoreboard(sw.getScoreboard(), p);
-        this.server.refreshStatusNextTick();
-
-        spnh.setPlayerLocation(p.getPosX(), p.getPosY(), p.getPosZ(), p.rotationYaw, p.rotationPitch);
-        this.addPlayer(p);
-        this.uuidToPlayerMap.put(p.getUniqueID(), p);
-        this.sendPacketToAllPlayers(new SPlayerListItemPacket(SPlayerListItemPacket.Action.ADD_PLAYER, p));
-
-        for(int i = 0; i < this.players.size(); i++) {
-            p.connection.sendPacket(new SPlayerListItemPacket(SPlayerListItemPacket.Action.ADD_PLAYER, players.get(i)));
-        }
-
-        sw.addNewPlayer(p);
-        server.getCustomBossEvents().onPlayerLogin(p);
-        sendWorldInfo(p, sw);
-        if(!this.server.getResourcePackUrl().isEmpty()) {
-            p.loadResourcePack(server.getResourcePackUrl(), server.getResourcePackHash());
-        }
-
-        for(EffectInstance effectinstance : p.getActivePotionEffects()) {
-            spnh.sendPacket(new SPlayEntityEffectPacket(p.getEntityId(), effectinstance));
-        }
-
-        if(compoundnbt != null && compoundnbt.contains("RootVehicle", 10)) {
-            CompoundNBT compoundnbt1 = compoundnbt.getCompound("RootVehicle");
-            final ServerWorld worldf = sw;
-            Entity entity1 = EntityType.func_220335_a(compoundnbt1.getCompound("Entity"), sw, (p_217885_1_) -> {
-                return !worldf.summonEntity(p_217885_1_) ? null : p_217885_1_;
-            });
-            if(entity1 != null) {
-                UUID uuid = compoundnbt1.getUniqueId("Attach");
-                if(entity1.getUniqueID().equals(uuid)) {
-                    p.startRiding(entity1, true);
-                } else {
-                    for(Entity entity : entity1.getRecursivePassengers()) {
-                        if(entity.getUniqueID().equals(uuid)) {
-                            p.startRiding(entity, true);
-                            break;
-                        }
-                    }
-                }
-
-                if(!p.isPassenger()) {
-                    LogManager.getLogger().warn("Couldn't reattach entity to player");
-                    p.removeEntity(entity1);
-
-                    for(Entity entity2 : entity1.getRecursivePassengers()) {
-                        sw.removeEntity(entity2);
-                    }
-                }
-            }
-        }
-
-        p.addSelfToInternalCraftingInventory();
-        net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerLoggedIn(p);
-    }
-
     @Override
     public ServerPlayerEntity createPlayerForUser(GameProfile profile) {
         UUID uuid = PlayerEntity.getUUID(profile);
         List<ServerPlayerEntity> list = Lists.newArrayList();
 
-        for(int i = 0; i < this.players.size(); i++) {
-            ServerPlayerEntity p = this.players.get(i);
-            if(p.getUniqueID().equals(uuid)) {
-                list.add(p);
+        for(int i = 0; i < this.players.size(); ++i) {
+            ServerPlayerEntity serverplayerentity = this.players.get(i);
+            if(serverplayerentity.getUniqueID().equals(uuid)) {
+                list.add(serverplayerentity);
             }
         }
 
-        ServerPlayerEntity p2 = this.uuidToPlayerMap.get(profile.getId());
-        if(p2 != null && !list.contains(p2)) {
-            list.add(p2);
+        ServerPlayerEntity p = this.uuidToPlayerMap.get(profile.getId());
+        if(p != null && !list.contains(p)) {
+            list.add(p);
         }
 
-        for(ServerPlayerEntity p : list) {
-            p.connection.disconnect(new TranslationTextComponent("multiplayer.disconnect.duplicate_login"));
+        for(ServerPlayerEntity serverplayerentity1 : list) {
+            serverplayerentity1.connection.disconnect(new TranslationTextComponent("multiplayer.disconnect.duplicate_login"));
         }
 
-        PlayerInteractionManager playerinteractionmanager;
-        if(server.isDemo()) {
-            playerinteractionmanager = new DemoPlayerInteractionManager(server.getWorld(DimensionType.OVERWORLD));
+        ServerWorld w = this.server.func_241755_D_();
+        PlayerInteractionManager manager;
+        if(this.server.isDemo()) {
+            manager = new DemoPlayerInteractionManager(w);
         } else {
-            playerinteractionmanager = new PlayerInteractionManager(server.getWorld(DimensionType.OVERWORLD));
+            manager = new PlayerInteractionManager(w);
         }
 
-        return new ModEntityPlayerMP(this.server, this.server.getWorld(DimensionType.OVERWORLD), profile, playerinteractionmanager);
+        return new ModEntityPlayerMP(this.server, w, profile, manager);
     }
 
     @Override
-    public ServerPlayerEntity recreatePlayerEntity(ServerPlayerEntity pIn, DimensionType dim, boolean conqueredEnd) {
+    public ServerPlayerEntity func_232644_a_(ServerPlayerEntity pIn, boolean p_232644_2_) {
         Server.scriptEvents.onPlayerPreRespawn(pIn);
-        ServerWorld world = server.getWorld(dim);
-        if(world == null) {
-            dim = pIn.getSpawnDimension();
-        } else if(!world.getDimension().canRespawnHere()) {
-            dim = world.getDimension().getRespawnDimension(pIn);
-        }
-        if(server.getWorld(dim) == null) {
-            dim = DimensionType.OVERWORLD;
-        }
-
         this.removePlayer(pIn);
         pIn.getServerWorld().removePlayer(pIn, true); // Forge: keep data until copyFrom called
-        BlockPos blockpos = pIn.getBedLocation(dim);
-        boolean flag = pIn.isSpawnForced(dim);
-        pIn.dimension = dim;
-        PlayerInteractionManager playerinteractionmanager;
+        BlockPos blockpos = pIn.func_241140_K_();
+        float f = pIn.func_242109_L();
+        boolean flag = pIn.func_241142_M_();
+        ServerWorld serverworld = server.getWorld(pIn.func_241141_L_());
+        Optional<Vector3d> optional;
+        if(serverworld != null && blockpos != null) {
+            optional = PlayerEntity.func_242374_a(serverworld, blockpos, f, flag, p_232644_2_);
+        } else {
+            optional = Optional.empty();
+        }
+
+        ServerWorld w = serverworld != null && optional.isPresent() ? serverworld : server.func_241755_D_();
+        PlayerInteractionManager manager;
         if(this.server.isDemo()) {
-            playerinteractionmanager = new DemoPlayerInteractionManager(this.server.getWorld(pIn.dimension));
+            manager = new DemoPlayerInteractionManager(w);
         } else {
-            playerinteractionmanager = new PlayerInteractionManager(this.server.getWorld(pIn.dimension));
+            manager = new PlayerInteractionManager(w);
         }
 
-        ServerPlayerEntity p = new ModEntityPlayerMP(this.server, this.server.getWorld(pIn.dimension), pIn.getGameProfile(), playerinteractionmanager, (ModEntityPlayerMP) pIn);
+        ServerPlayerEntity p = new ModEntityPlayerMP(server, w, pIn.getGameProfile(), manager, (ModEntityPlayerMP) pIn);
         p.connection = pIn.connection;
-        p.copyFrom(pIn, conqueredEnd);
+        p.copyFrom(pIn, p_232644_2_);
         pIn.remove(false); // Forge: clone event had a chance to see old data, now discard it
-        p.dimension = dim;
         p.setEntityId(pIn.getEntityId());
         p.setPrimaryHand(pIn.getPrimaryHand());
 
@@ -222,39 +118,49 @@ public final class ModPlayerList extends DedicatedPlayerList {
             p.addTag(s);
         }
 
-        ServerWorld sw = this.server.getWorld(pIn.dimension);
-        setPlayerGameTypeBasedOnOther(p, pIn, sw);
-        if(blockpos != null) {
-            Optional<Vec3d> optional = PlayerEntity.checkBedValidRespawnPosition(server.getWorld(pIn.dimension), blockpos, flag);
-            if(optional.isPresent()) {
-                Vec3d vec3d = optional.get();
-                p.setLocationAndAngles(vec3d.x, vec3d.y, vec3d.z, 0.0f, 0.0f);
-                p.setSpawnPoint(blockpos, flag, false, dim);
+        this.setPlayerGameTypeBasedOnOther(p, pIn, w);
+        boolean flag2 = false;
+        if(optional.isPresent()) {
+            BlockState blockstate = w.getBlockState(blockpos);
+            boolean flag1 = blockstate.isIn(Blocks.RESPAWN_ANCHOR);
+            Vector3d vector3d = optional.get();
+            float f1;
+            if(!blockstate.isIn(BlockTags.BEDS) && !flag1) {
+                f1 = f;
             } else {
-                p.connection.sendPacket(new SChangeGameStatePacket(0, 0.0f));
+                Vector3d vector3d1 = Vector3d.copyCenteredHorizontally(blockpos).subtract(vector3d).normalize();
+                f1 = (float) MathHelper.wrapDegrees(MathHelper.atan2(vector3d1.z, vector3d1.x) * (double) (180F / (float) Math.PI) - 90.0D);
             }
+
+            p.setLocationAndAngles(vector3d.x, vector3d.y, vector3d.z, f1, 0.0F);
+            p.func_242111_a(w.getDimensionKey(), blockpos, f, flag, false);
+            flag2 = !p_232644_2_ && flag1;
+        } else if(blockpos != null) {
+            p.connection.sendPacket(new SChangeGameStatePacket(SChangeGameStatePacket.field_241764_a_, 0.0F));
         }
 
-        while(!sw.hasNoCollisions(p) && p.getPosY() < 256.0D) {
-            p.setPosition(p.getPosX(), p.getPosY() + 1.0, p.getPosZ());
+        while(!w.hasNoCollisions(p) && p.getPosY() < 256.0D) {
+            p.setPosition(p.getPosX(), p.getPosY() + 1.0D, p.getPosZ());
         }
 
-        WorldInfo wi = p.world.getWorldInfo();
-        net.minecraftforge.fml.network.NetworkHooks.sendDimensionDataPacket(p.connection.netManager, p);
-        p.connection.sendPacket(new SRespawnPacket(p.dimension, WorldInfo.byHashing(wi.getSeed()), wi.getGenerator(), p.interactionManager.getGameType()));
-        BlockPos pos = sw.getSpawnPoint();
+        IWorldInfo iworldinfo = p.world.getWorldInfo();
+        p.connection.sendPacket(new SRespawnPacket(p.world.getDimensionType(), p.world.getDimensionKey(), BiomeManager.getHashedSeed(p.getServerWorld().getSeed()), p.interactionManager.getGameType(), p.interactionManager.func_241815_c_(), p.getServerWorld().isDebug(), p.getServerWorld().func_241109_A_(), p_232644_2_));
         p.connection.setPlayerLocation(p.getPosX(), p.getPosY(), p.getPosZ(), p.rotationYaw, p.rotationPitch);
-        p.connection.sendPacket(new SSpawnPositionPacket(pos));
-        p.connection.sendPacket(new SServerDifficultyPacket(wi.getDifficulty(), wi.isDifficultyLocked()));
+        p.connection.sendPacket(new SWorldSpawnChangedPacket(w.getSpawnPoint(), w.func_242107_v()));
+        p.connection.sendPacket(new SServerDifficultyPacket(iworldinfo.getDifficulty(), iworldinfo.isDifficultyLocked()));
         p.connection.sendPacket(new SSetExperiencePacket(p.experience, p.experienceTotal, p.experienceLevel));
-        sendWorldInfo(p, sw);
-        updatePermissionLevel(p);
-        sw.addRespawnedPlayer(p);
+        this.sendWorldInfo(p, w);
+        this.updatePermissionLevel(p);
+        w.addRespawnedPlayer(p);
         this.addPlayer(p);
         this.uuidToPlayerMap.put(p.getUniqueID(), p);
         p.addSelfToInternalCraftingInventory();
         p.setHealth(p.getHealth());
-        net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerRespawnEvent(p, conqueredEnd);
+        net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerRespawnEvent(p, p_232644_2_);
+        if(flag2) {
+            p.connection.sendPacket(new SPlaySoundEffectPacket(SoundEvents.BLOCK_RESPAWN_ANCHOR_DEPLETE, SoundCategory.BLOCKS, (double) blockpos.getX(), (double) blockpos.getY(), (double) blockpos.getZ(), 1.0F, 1.0F));
+        }
+
         return p;
     }
 
@@ -263,11 +169,17 @@ public final class ModPlayerList extends DedicatedPlayerList {
     }
 
     @Override
-    public void sendMessage(ITextComponent component) {
-        // filter multiplayer leave text
-        if(component instanceof TranslationTextComponent && ((TranslationTextComponent) component).getKey().equals("multiplayer.player.left")) {
-            return;
+    public void func_232641_a_(ITextComponent message, ChatType chat, UUID uuid) {
+        if(message instanceof TranslationTextComponent) {
+            TranslationTextComponent translation = (TranslationTextComponent) message;
+            switch(translation.getKey()) {
+                case "multiplayer.player.left":
+                case "multiplayer.player.joined":
+                case "multiplayer.player.joined.renamed":
+                    return;
+            }
         }
-        super.sendMessage(component);
+        super.func_232641_a_(message, chat, uuid);
     }
+
 }

+ 0 - 14
src/main/java/me/km/overrides/ModPlayerRenderer.java

@@ -1,14 +0,0 @@
-package me.km.overrides;
-
-import net.minecraft.client.renderer.entity.EntityRendererManager;
-import net.minecraft.client.renderer.entity.PlayerRenderer;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-
-@OnlyIn(Dist.CLIENT)
-public class ModPlayerRenderer extends PlayerRenderer {
-    public ModPlayerRenderer(EntityRendererManager renderManager, boolean useSmallArms) {
-        super(renderManager, useSmallArms);
-        this.addLayer(new ModCapeLayer(this));
-    }
-}

+ 0 - 71
src/main/java/me/km/overrides/PlayerCapeLoader.java

@@ -1,71 +0,0 @@
-package me.km.overrides;
-
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.UUID;
-import java.util.function.Consumer;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.texture.DynamicTexture;
-import net.minecraft.client.renderer.texture.NativeImage;
-import net.minecraft.client.renderer.texture.TextureManager;
-import net.minecraft.util.ResourceLocation;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
-import org.apache.logging.log4j.LogManager;
-
-@OnlyIn(Dist.CLIENT)
-public class PlayerCapeLoader {
-    private static class Data {
-        private ResourceLocation cape;
-    }
-
-    public final static PlayerCapeLoader INSTANCE = new PlayerCapeLoader();
-
-    private final HashMap<UUID, Data> skins = new HashMap<>();
-
-    private final TextureManager manager = Minecraft.getInstance().getRenderManager().textureManager;
-
-    private PlayerCapeLoader() {
-    }
-
-    public ResourceLocation getTexture(UUID uuid) {
-        Data oldData = skins.get(uuid);
-        if(oldData != null) {
-            return oldData.cape;
-        }
-        Data newData = new Data();
-        skins.put(uuid, newData);
-        downloadCape(uuid, image -> {
-            newData.cape = manager.getDynamicTextureLocation("cape_" + uuid, new DynamicTexture(image));
-        });
-        return null;
-    }
-
-    private void downloadCape(UUID uuid, Consumer<NativeImage> delayed) {
-        new Thread(() -> {
-            HttpURLConnection httpurlconnection = null;
-            try {
-                httpurlconnection = (HttpURLConnection) (new URL(String.format("http://skins.hammerle.me/cape_%s.png", uuid)))
-                        .openConnection(Minecraft.getInstance().getProxy());
-                httpurlconnection.setDoInput(true);
-                httpurlconnection.setDoOutput(false);
-                httpurlconnection.connect();
-
-                int code = httpurlconnection.getResponseCode();
-                if(code != 200) {
-                    return;
-                }
-
-                NativeImage image = NativeImage.read(httpurlconnection.getInputStream());
-                Minecraft.getInstance().enqueue(() -> delayed.accept(image));
-            } catch(Exception ex) {
-                LogManager.getLogger().warn("Error occurred when downloading skin, however, skin servers seem to be up.");
-            } finally {
-                if(httpurlconnection != null) {
-                    httpurlconnection.disconnect();
-                }
-            }
-        }).start();
-    }
-}

+ 3 - 2
src/main/java/me/km/permissions/Command.java

@@ -2,6 +2,7 @@ package me.km.permissions;
 
 import java.util.Collections;
 import net.minecraft.command.ICommandSource;
+import net.minecraft.util.Util;
 import net.minecraft.util.text.StringTextComponent;
 
 public abstract class Command {
@@ -14,10 +15,10 @@ public abstract class Command {
     public abstract void execute(ICommandSource cs, String[] arg);
 
     public void sendMessage(ICommandSource cs, String message) {
-        cs.sendMessage(new StringTextComponent(String.format("[§dScript§r] %s", message)));
+        cs.sendMessage(new StringTextComponent(String.format("[§dScript§r] %s", message)), Util.DUMMY_UUID);
     }
 
     public void sendListMessage(ICommandSource cs, String message1, String message2) {
-        cs.sendMessage(new StringTextComponent(String.format("§d - %s§r %s", message1, message2)));
+        cs.sendMessage(new StringTextComponent(String.format("§d - %s§r %s", message1, message2)), Util.DUMMY_UUID);
     }
 }

+ 2 - 2
src/main/java/me/km/permissions/ModCommandManager.java

@@ -34,8 +34,8 @@ public class ModCommandManager extends Commands {
     private final ArrayList<CommandNode> customNodes = new ArrayList<>();
     private final HashSet<String> ignoredCommands = new HashSet<>();
 
-    public ModCommandManager(boolean isDedicatedServer, Permissions perms, ScriptEvents events, Scripts scripts, ISnuviScheduler scheduler) {
-        super(isDedicatedServer);
+    public ModCommandManager(Permissions perms, ScriptEvents events, Scripts scripts, ISnuviScheduler scheduler) {
+        super(EnvironmentType.DEDICATED);
         getDispatcher().getRoot().getChildren().forEach(c -> {
             otherCommands.add(c.getName());
         });

+ 7 - 7
src/main/java/me/km/plots/ProtectionEvents.java

@@ -10,7 +10,7 @@ import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.math.BlockRayTraceResult;
 import net.minecraft.util.math.EntityRayTraceResult;
 import net.minecraft.util.math.RayTraceResult;
-import net.minecraft.world.dimension.DimensionType;
+import net.minecraft.world.World;
 import net.minecraftforge.event.entity.EntityJoinWorldEvent;
 import net.minecraftforge.event.entity.EntityStruckByLightningEvent;
 import net.minecraftforge.event.entity.ProjectileImpactEvent;
@@ -44,7 +44,7 @@ public class ProtectionEvents {
     public void onBlockPlace(BlockEvent.EntityPlaceEvent e) {
         if(e.getEntity() instanceof PlayerEntity) {
             PlayerEntity p = (PlayerEntity) e.getEntity();
-            if(!canBypass(p) && !plots.canPlaceBlock(e.getWorld(), e.getPos(), p)) {
+            if(!canBypass(p) && e.getWorld() instanceof World && !plots.canPlaceBlock((World) e.getWorld(), e.getPos(), p)) {
                 e.setCanceled(true);
             }
         }
@@ -53,7 +53,7 @@ public class ProtectionEvents {
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onBlockBreak(BlockEvent.BreakEvent e) {
         PlayerEntity p = e.getPlayer();
-        if(!canBypass(p) && !plots.canBreakBlock(e.getWorld(), e.getPos(), p)) {
+        if(!canBypass(p) && e.getWorld() instanceof World && !plots.canBreakBlock((World) e.getWorld(), e.getPos(), p)) {
             e.setCanceled(true);
         }
     }
@@ -61,9 +61,9 @@ public class ProtectionEvents {
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void onBossSpawn(EntityJoinWorldEvent e) {
         EntityType type = e.getEntity().getType();
-        if(type == EntityType.WITHER && e.getWorld().getDimension().getType() != DimensionType.THE_NETHER) {
+        if(type == EntityType.WITHER && e.getWorld().getDimensionType().isUltrawarm()) {
             e.setCanceled(true);
-        } else if(type == EntityType.ENDER_DRAGON && e.getWorld().getDimension().getType() != DimensionType.THE_END) {
+        } else if(type == EntityType.ENDER_DRAGON && !e.getWorld().getDimensionType().doesHasDragonFight()) {
             e.setCanceled(true);
         }
     }
@@ -94,7 +94,7 @@ public class ProtectionEvents {
         if(e.getRayTraceResult().getType() == RayTraceResult.Type.ENTITY) {
             EntityRayTraceResult result = (EntityRayTraceResult) e.getRayTraceResult();
             if(shouldBeProtected(result.getEntity())) {
-                Entity thrower = e.getThrowable().getThrower();
+                Entity thrower = e.getThrowable().func_234616_v_();
                 if(thrower != null && (thrower instanceof PlayerEntity)) {
                     PlayerEntity p = (PlayerEntity) thrower;
                     if(!canBypass(p) && !plots.canHitAmbientEntity(p.world, e.getThrowable().getPosition(), p)) {
@@ -112,7 +112,7 @@ public class ProtectionEvents {
         if(e.getRayTraceResult().getType() == RayTraceResult.Type.ENTITY) {
             EntityRayTraceResult result = (EntityRayTraceResult) e.getRayTraceResult();
             if(shouldBeProtected(result.getEntity())) {
-                Entity shooter = e.getArrow().getShooter();
+                Entity shooter = e.getArrow().func_234616_v_();
                 if(shooter != null && (shooter instanceof ModEntityPlayerMP)) {
                     PlayerEntity p = (PlayerEntity) shooter;
                     if(!canBypass(p) && !plots.canHitAmbientEntity(p.world, e.getArrow().getPosition(), p)) {

+ 18 - 18
src/main/java/me/km/plots/WorldPlotMap.java

@@ -9,14 +9,14 @@ import java.util.List;
 import java.util.UUID;
 import me.hammerle.snuviscript.code.ISnuviLogger;
 import me.km.plots.PlotMap.Plot;
-import me.km.world.WorldManager;
+import me.km.utils.Utils;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.IWorld;
+import net.minecraft.world.World;
 
 public class WorldPlotMap {
-    private final HashMap<IWorld, PlotMap> maps = new HashMap<>();
+    private final HashMap<World, PlotMap> maps = new HashMap<>();
 
     private final static int PLACE_FLAG = (1 << 0);
     private final static int BREAK_FLAG = (1 << 1);
@@ -25,7 +25,7 @@ public class WorldPlotMap {
     private final static int BLOCK_INTERACT_FLAG = (1 << 4);
     private final static int ENTITY_INTERACT_FLAG = (1 << 5);
 
-    public boolean canDoSomething(IWorld w, BlockPos pos, PlayerEntity p, int flag, boolean empty) {
+    public boolean canDoSomething(World w, BlockPos pos, PlayerEntity p, int flag, boolean empty) {
         PlotMap map = maps.get(w);
         if(map == null) {
             return empty;
@@ -38,31 +38,31 @@ public class WorldPlotMap {
                 plot -> plot.hasFlags(flag) || plot.getOwners().contains(uuid));
     }
 
-    public boolean canPlaceBlock(IWorld w, BlockPos pos, PlayerEntity p) {
+    public boolean canPlaceBlock(World w, BlockPos pos, PlayerEntity p) {
         return canDoSomething(w, pos, p, PLACE_FLAG, true);
     }
 
-    public boolean canBreakBlock(IWorld w, BlockPos pos, PlayerEntity p) {
+    public boolean canBreakBlock(World w, BlockPos pos, PlayerEntity p) {
         return canDoSomething(w, pos, p, BREAK_FLAG, true);
     }
 
-    public boolean canUseBucket(IWorld w, BlockPos pos, PlayerEntity p) {
+    public boolean canUseBucket(World w, BlockPos pos, PlayerEntity p) {
         return canDoSomething(w, pos, p, BUCKET_FLAG, true);
     }
 
-    public boolean canHitAmbientEntity(IWorld w, BlockPos pos, PlayerEntity p) {
+    public boolean canHitAmbientEntity(World w, BlockPos pos, PlayerEntity p) {
         return canDoSomething(w, pos, p, HIT_AMBIENT_FLAG, true);
     }
 
-    public boolean canInteractWithBlock(IWorld w, BlockPos pos, PlayerEntity p) {
+    public boolean canInteractWithBlock(World w, BlockPos pos, PlayerEntity p) {
         return canDoSomething(w, pos, p, BLOCK_INTERACT_FLAG, true);
     }
 
-    public boolean canInteractWithEntity(IWorld w, BlockPos pos, PlayerEntity p) {
+    public boolean canInteractWithEntity(World w, BlockPos pos, PlayerEntity p) {
         return canDoSomething(w, pos, p, ENTITY_INTERACT_FLAG, true);
     }
 
-    public List<PlotMap.Plot> getPlots(IWorld w, BlockPos pos) {
+    public List<PlotMap.Plot> getPlots(World w, BlockPos pos) {
         PlotMap map = maps.get(w);
         if(map == null) {
             return new ArrayList<>();
@@ -70,7 +70,7 @@ public class WorldPlotMap {
         return map.getPlotAt(pos.getX(), pos.getY(), pos.getZ());
     }
 
-    public PlotMap.Plot add(IWorld w, BlockPos pos1, BlockPos pos2) {
+    public PlotMap.Plot add(World w, BlockPos pos1, BlockPos pos2) {
         PlotMap map = maps.get(w);
         if(map == null) {
             map = new PlotMap();
@@ -79,14 +79,14 @@ public class WorldPlotMap {
         return map.add(pos1.getX(), pos1.getY(), pos1.getZ(), pos2.getX(), pos2.getY(), pos2.getZ());
     }
 
-    public void remove(IWorld w, Plot p) {
+    public void remove(World w, Plot p) {
         PlotMap map = maps.get(w);
         if(map != null) {
             map.remove(p);
         }
     }
 
-    public Iterator<PlotMap.Plot> getIterator(IWorld w) {
+    public Iterator<PlotMap.Plot> getIterator(World w) {
         PlotMap map = maps.get(w);
         if(map != null) {
             return map.getIterator();
@@ -94,7 +94,7 @@ public class WorldPlotMap {
         return Collections.EMPTY_LIST.iterator();
     }
 
-    public Iterator<PlotMap.Plot> getIterator(IWorld w, UUID uuid) {
+    public Iterator<PlotMap.Plot> getIterator(World w, UUID uuid) {
         PlotMap map = maps.get(w);
         if(map != null) {
             return map.getIterator(uuid);
@@ -102,7 +102,7 @@ public class WorldPlotMap {
         return Collections.EMPTY_LIST.iterator();
     }
 
-    public List<Plot> getIntersectingPlots(IWorld w, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
+    public List<Plot> getIntersectingPlots(World w, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
         PlotMap map = maps.get(w);
         if(map != null) {
             return map.getIntersectingPlots(minX, minY, minZ, maxX, maxY, maxZ);
@@ -114,7 +114,7 @@ public class WorldPlotMap {
         File f = new File("plot_storage");
         f.mkdir();
         maps.entrySet().forEach((entry) -> {
-            String name = WorldManager.getName(entry.getKey());
+            String name = Utils.getWorldName(entry.getKey());
             entry.getValue().save("plot_storage/" + name);
         });
     }
@@ -126,7 +126,7 @@ public class WorldPlotMap {
         }
         for(File f : dir.listFiles()) {
             String name = f.getName();
-            IWorld sw = WorldManager.get(ms, f.getName());
+            World sw = Utils.getWorldFromName(ms, f.getName());
             if(sw == null) {
                 logger.print(String.format("invalid world storage '%s'", name));
                 continue;

+ 5 - 5
src/main/java/me/km/snuviscript/FakeMerchant.java

@@ -70,11 +70,6 @@ public class FakeMerchant extends Entity implements IMerchant {
     public void setXP(int xp) {
     }
 
-    @Override
-    public boolean func_213705_dZ() {
-        return false;
-    }
-
     @Override
     public SoundEvent getYesSound() {
         return SoundEvents.ENTITY_VILLAGER_YES;
@@ -96,4 +91,9 @@ public class FakeMerchant extends Entity implements IMerchant {
     public IPacket<?> createSpawnPacket() {
         return null;
     }
+
+    @Override
+    public boolean hasXPBar() {
+        return false;
+    }
 }

+ 13 - 11
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -21,15 +21,17 @@ import net.minecraft.inventory.container.ClickType;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.crafting.ICraftingRecipe;
 import net.minecraft.item.crafting.IRecipeType;
+import net.minecraft.loot.LootContext;
+import net.minecraft.loot.LootParameters;
 import net.minecraft.network.play.server.SSetSlotPacket;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.management.PlayerList;
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.util.math.*;
+import net.minecraft.util.math.vector.Vector3d;
 import net.minecraft.util.text.*;
 import net.minecraft.world.*;
 import net.minecraft.world.server.ServerWorld;
-import net.minecraft.world.storage.loot.*;
 import net.minecraftforge.event.*;
 import net.minecraftforge.event.entity.*;
 import net.minecraftforge.event.entity.item.ItemTossEvent;
@@ -54,18 +56,18 @@ public class ScriptEvents implements BlockHarvest, Craft {
         sc.setVar("player", p);
 
         // deprecated
-        sc.setVar("player_name", p == null ? null : p.getName().getFormattedText());
+        sc.setVar("player_name", p == null ? null : p.getName().getString());
     }
 
     @SuppressWarnings("")
-    private static void setBlock(Script sc, IWorld w, BlockPos pos, BlockState state) {
+    private static void setBlock(Script sc, World w, BlockPos pos, BlockState state) {
         sc.setVar("block_loc", new Location(w, pos));
         sc.setVar("block_type", state.getBlock().getRegistryName().toString());
         sc.setVar("block", state.getBlock());
     }
 
     @SuppressWarnings("")
-    private static void setBlock(Script sc, IWorld w, BlockPos pos) {
+    private static void setBlock(Script sc, World w, BlockPos pos) {
         BlockState state = w.getBlockState(pos);
         sc.setVar("block_loc", new Location(w, pos));
         sc.setVar("block_type", state.getBlock().getRegistryName().toString());
@@ -167,7 +169,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
             setPlayer(sc, p);
             sc.setVar("inv", inv);
             sc.setVar("inv_id", (double) inv.getModId());
-            sc.setVar("inv_name", text.getFormattedText());
+            sc.setVar("inv_name", text.getString());
             sc.setVar("inv_slot", (double) slot);
             setItem(sc, inv.getStackInSlot(slot));
             sc.setVar("cancel", false);
@@ -181,7 +183,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
             setPlayer(sc, p);
             sc.setVar("inv", inv);
             sc.setVar("inv_id", (double) inv.getModId());
-            sc.setVar("inv_name", text.getFormattedText());
+            sc.setVar("inv_name", text.getString());
         }, ScriptEvents::nothing);
     }
 
@@ -301,7 +303,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
     public List<ItemStack> onBlockHarvest(BlockState state, ServerWorld w, BlockPos pos, TileEntity tileEnt, Entity ent, ItemStack stack) {
         LootContext.Builder loot = new LootContext.Builder(w)
                 .withRandom(w.getRandom())
-                .withParameter(LootParameters.POSITION, pos)
+                .withParameter(LootParameters.field_237457_g_, Vector3d.copyCentered(pos))
                 .withParameter(LootParameters.TOOL, stack == null ? ItemStack.EMPTY : stack)
                 .withNullableParameter(LootParameters.THIS_ENTITY, ent)
                 .withNullableParameter(LootParameters.BLOCK_ENTITY, tileEnt);
@@ -327,7 +329,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
     public void onBlockBreak(BlockEvent.BreakEvent e) {
         handleEvent("block_break", (sc) -> {
             setPlayer(sc, e.getPlayer());
-            setBlock(sc, e.getWorld(), e.getPos(), e.getState());
+            setBlock(sc, (World) e.getWorld(), e.getPos(), e.getState());
             sc.setVar("cancel", e.isCanceled());
         }, (sc) -> {
             simpleCancel(sc, e, "block_break");
@@ -343,7 +345,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
         handleEvent("block_place", (sc) -> {
             setPlayer(sc, p);
             sc.setVar("block_type_after", e.getPlacedBlock().getBlock().getRegistryName());
-            setBlock(sc, e.getWorld(), e.getPos(), e.getState());
+            setBlock(sc, (World) e.getWorld(), e.getPos(), e.getState());
             sc.setVar("cancel", e.isCanceled());
         }, (sc) -> {
             simpleCancel(sc, e, "block_place");
@@ -591,7 +593,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
 
     @SubscribeEvent
     public void onExplosion(ExplosionEvent.Detonate e) {
-        ExplosionUtils.explosion(e.getExplosion(), e.getWorld());
+        ReflectionUtils.setNoBreakMode(e.getExplosion());
         handleEvent(e, "explosion", sc -> {
             sc.setVar("affected_blocks", e.getAffectedBlocks());
             sc.setVar("affected_entities", e.getAffectedEntities());
@@ -602,7 +604,7 @@ public class ScriptEvents implements BlockHarvest, Craft {
 
     private static String getName(ICommandSource cs) {
         if(cs instanceof PlayerEntity) {
-            return ((PlayerEntity) cs).getName().getFormattedText();
+            return ((PlayerEntity) cs).getName().getString();
         } else if(cs instanceof MinecraftServer) {
             return "Server";
         }

+ 4 - 3
src/main/java/me/km/snuviscript/SnuviLogger.java

@@ -5,6 +5,7 @@ import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.exceptions.StackTrace;
 import me.km.permissions.Permissions;
 import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.Util;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.StringTextComponent;
 
@@ -42,7 +43,7 @@ public class SnuviLogger implements ISnuviLogger {
         if(server != null && perms != null && server.getPlayerList() != null) {
             server.getPlayerList().getPlayers().forEach(p -> {
                 if(perms.has(p, perm)) {
-                    p.sendMessage(text);
+                    p.sendMessage(text, Util.DUMMY_UUID);
                 }
             });
         }
@@ -83,13 +84,13 @@ public class SnuviLogger implements ISnuviLogger {
         if(ex == null) {
             debugHistory.add(s);
             if(printDebugToConsole && server != null) {
-                server.sendMessage(text);
+                server.sendMessage(text, Util.DUMMY_UUID);
             }
             sendToPlayers(text, "script.debug");
         } else {
             errorHistory.add(s);
             if(printErrorToConsole && server != null) {
-                server.sendMessage(text);
+                server.sendMessage(text, Util.DUMMY_UUID);
             }
             sendToPlayers(text, "script.error");
         }

+ 11 - 8
src/main/java/me/km/snuviscript/commands/BlockCommands.java

@@ -14,7 +14,7 @@ import net.minecraft.inventory.IInventory;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.CompoundNBT;
 import net.minecraft.network.play.server.SUpdateTileEntityPacket;
-import net.minecraft.state.IProperty;
+import net.minecraft.state.Property;
 import net.minecraft.state.properties.ChestType;
 import net.minecraft.tags.BlockTags;
 import net.minecraft.tags.Tag;
@@ -24,6 +24,7 @@ import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.world.IWorld;
+import net.minecraft.world.World;
 
 public class BlockCommands {
 
@@ -84,7 +85,8 @@ public class BlockCommands {
         sm.registerFunction("block.countair", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
             IWorld w = l.getWorld();
-            BlockPos.Mutable pos = new BlockPos.Mutable(l.getBlockPos());
+            BlockPos oldPos = l.getBlockPos();
+            BlockPos.Mutable pos = new BlockPos.Mutable(oldPos.getX(), oldPos.getY(), oldPos.getZ());
             int ox = pos.getX();
             int oy = pos.getY();
             int oz = pos.getZ();
@@ -104,9 +106,9 @@ public class BlockCommands {
         sm.registerFunction("block.getproperty", (sc, in) -> Mapper.getProperty(in[0].getString(sc)));
         sm.registerFunction("block.getstate", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
-            IProperty prop = (IProperty) in[1].get(sc);
+            Property prop = (Property) in[1].get(sc);
             BlockState state = l.getWorld().getBlockState(l.getBlockPos());
-            if(state.has(prop)) {
+            if(state.hasProperty(prop)) {
                 Object o = l.getWorld().getBlockState(l.getBlockPos()).get(prop);
                 if(o instanceof Number) {
                     return ((Number) o).doubleValue();
@@ -135,7 +137,7 @@ public class BlockCommands {
                 nbt.putInt("x", pos1.getX());
                 nbt.putInt("y", pos1.getY());
                 nbt.putInt("z", pos1.getZ());
-                tileEnt1.read(nbt);
+                tileEnt1.read(w1.getBlockState(pos1), nbt);
                 tileEnt1.markDirty();
             }
         });
@@ -168,7 +170,7 @@ public class BlockCommands {
                 return false;
             }
             SignTileEntity sign = (SignTileEntity) te;
-            sign.signText[in[1].getInt(sc)] = new StringTextComponent(SnuviUtils.connect(sc, in, 2));
+            sign.setText(in[1].getInt(sc), new StringTextComponent(SnuviUtils.connect(sc, in, 2)));
             SUpdateTileEntityPacket packet = sign.getUpdatePacket();
             l.getWorld().getPlayers().forEach(p -> ((ServerPlayerEntity) p).connection.sendPacket(packet));
             return true;
@@ -179,12 +181,13 @@ public class BlockCommands {
             if(te == null || !(te instanceof SignTileEntity)) {
                 return null;
             }
-            return ((SignTileEntity) te).signText[in[1].getInt(sc)].getString();
+            return ((SignTileEntity) te).getText(in[1].getInt(sc)).getString();
         });
         sm.registerConsumer("block.setdoorstatus", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
             BlockPos pos = l.getBlockPos();
-            ((DoorBlock) l.getWorld().getBlockState(pos).getBlock()).toggleDoor(l.getWorld().getWorld(), pos, in[1].getBoolean(sc));
+            BlockState state = l.getWorld().getBlockState(pos);
+            ((DoorBlock) state.getBlock()).openDoor((World) l.getWorld(), state, pos, in[1].getBoolean(sc));
         });
         sm.registerFunction("block.getdoorstatus", (sc, in) -> {
             Location l = (Location) in[0].get(sc);

+ 4 - 3
src/main/java/me/km/snuviscript/commands/CommandUtils.java

@@ -13,6 +13,7 @@ import net.minecraft.block.BlockState;
 import net.minecraft.command.ICommandSource;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.Util;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.StringTextComponent;
 
@@ -36,16 +37,16 @@ public class CommandUtils {
         for(int i = start; i < ob.length; i++) {
             o = ob[i].get(sc);
             if(o instanceof ITextComponent) {
-                text.appendSibling((ITextComponent) o);
+                text.append((ITextComponent) o);
             } else {
-                text.appendText(String.valueOf(o));
+                text.appendString(String.valueOf(o));
             }
         }
         return text;
     }
 
     public static void sendMessageToGroup(MinecraftServer server, Scripts scripts, Permissions perms, Object group, Script sc, ITextComponent text) {
-        doForGroup(server, scripts, perms, group, sc, p -> p.sendMessage(text));
+        doForGroup(server, scripts, perms, group, sc, p -> p.sendMessage(text, Util.DUMMY_UUID));
     }
 
     public static void doForGroup(MinecraftServer server, Scripts scripts, Permissions perms, Object group, Script sc, Consumer<ICommandSource> c) {

+ 1 - 2
src/main/java/me/km/snuviscript/commands/DamageCommands.java

@@ -5,6 +5,7 @@ import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.DamageSource;
+import net.minecraftforge.registries.ForgeRegistries;
 
 public class DamageCommands {
     public static void registerFunctions(ScriptManager sm) {
@@ -93,8 +94,6 @@ public class DamageCommands {
                     return DamageSource.FALLING_BLOCK;
                 case "dragonBreath":
                     return DamageSource.DRAGON_BREATH;
-                case "fireworks":
-                    return DamageSource.FIREWORKS;
                 case "dryout":
                     return DamageSource.DRYOUT;
                 case "sweetBerryBush":

+ 21 - 20
src/main/java/me/km/snuviscript/commands/EntityCommands.java

@@ -9,6 +9,7 @@ import me.km.utils.Mapper;
 import me.km.utils.Utils;
 import net.minecraft.enchantment.EnchantmentHelper;
 import net.minecraft.entity.*;
+import net.minecraft.entity.ai.attributes.Attributes;
 import net.minecraft.entity.effect.LightningBoltEntity;
 import net.minecraft.entity.item.*;
 import net.minecraft.entity.monster.CreeperEntity;
@@ -22,12 +23,11 @@ import net.minecraft.nbt.JsonToNBT;
 import net.minecraft.potion.Effect;
 import net.minecraft.potion.EffectInstance;
 import net.minecraft.potion.PotionUtils;
-import net.minecraft.stats.Stats;
 import net.minecraft.util.DamageSource;
 import net.minecraft.util.Direction;
 import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.math.vector.Vector3d;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.world.World;
 import net.minecraft.world.server.ServerWorld;
@@ -40,14 +40,14 @@ public class EntityCommands {
         sm.registerFunction("entity.shootprojectile", (sc, in) -> launchProjectile((LivingEntity) in[0].get(sc),
                 getNamedClass(in[1].getString(sc)), in[2].getDouble(sc), in.length >= 4 ? in[3].get(sc) : null));
         sm.registerFunction("entity.isblocking", (sc, in) -> ((LivingEntity) in[0].get(sc)).isActiveItemStackBlocking());
-        sm.registerFunction("entity.getarmorthoughness", (sc, in) -> ((LivingEntity) in[0].get(sc)).getAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getValue());
+        sm.registerFunction("entity.getarmorthoughness", (sc, in) -> ((LivingEntity) in[0].get(sc)).getAttribute(Attributes.ARMOR_TOUGHNESS).getValue());
         sm.registerFunction("entity.getarmor", (sc, in) -> (double) ((LivingEntity) in[0].get(sc)).getTotalArmorValue());
         sm.registerFunction("entity.getenchantmentmodifier", (sc, in) -> EnchantmentHelper.getEnchantmentModifierDamage(((LivingEntity) in[0].get(sc)).getArmorInventoryList(), (DamageSource) in[1].get(sc)));
         sm.registerConsumer("entity.setburning", (sc, in) -> ((Entity) in[0].get(sc)).setFire(in[1].getInt(sc)));
         sm.registerFunction("entity.isburning", (sc, in) -> ((Entity) in[0].get(sc)).isBurning());
         sm.registerFunction("entity.getlook", (sc, in) -> {
             Object[] o = new Object[3];
-            Vec3d v = ((Entity) in[0].get(sc)).getLookVec();
+            Vector3d v = ((Entity) in[0].get(sc)).getLookVec();
             o[0] = v.x;
             o[1] = v.y;
             o[2] = v.z;
@@ -86,7 +86,7 @@ public class EntityCommands {
             }
             ent.setCustomNameVisible(false);
         });
-        sm.registerFunction("entity.getname", (sc, in) -> ((Entity) in[0].get(sc)).getDisplayName().getFormattedText());
+        sm.registerFunction("entity.getname", (sc, in) -> ((Entity) in[0].get(sc)).getDisplayName().getString());
         sm.registerConsumer("entity.throw", (sc, in) -> {
             Entity ent = (Entity) in[0].get(sc);
             ent.setMotion(in[1].getDouble(sc), in[2].getDouble(sc), in[3].getDouble(sc));
@@ -112,7 +112,7 @@ public class EntityCommands {
             } else {
                 if(ent.world != l.getWorld()) {
                     ServerWorld ws = (ServerWorld) l.getWorld();
-                    ent.changeDimension(ws.getDimension().getType());
+                    ent.changeDimension(ws);
                 }
                 float yaw = l.getYaw() != 0.0f ? l.getYaw() : ent.rotationYaw;
                 float pitch = l.getPitch() != 0.0f ? l.getPitch() : ent.rotationPitch;
@@ -207,7 +207,7 @@ public class EntityCommands {
         });
         sm.registerConsumer("entity.spawnitemframe", (sc, in) -> {
             Location l = ((Location) in[0].get(sc));
-            ItemFrameEntity frame = new ItemFrameEntity(l.getWorld().getWorld(), l.getBlockPos(), Direction.byName(in[1].getString(sc)));
+            ItemFrameEntity frame = new ItemFrameEntity(l.getWorld(), l.getBlockPos(), Direction.byName(in[1].getString(sc)));
             frame.setDisplayedItem(((ItemStack) in[2].get(sc))); // copy happens in internals
             l.getWorld().addEntity(frame);
         });
@@ -232,17 +232,18 @@ public class EntityCommands {
             CompoundNBT compoundnbt = in.length >= 3 ? JsonToNBT.getTagFromJson(in[2].getString(sc)) : new CompoundNBT();
             compoundnbt.putString("id", rl.toString());
             if(EntityType.getKey(EntityType.LIGHTNING_BOLT).equals(rl)) {
-                LightningBoltEntity ent = new LightningBoltEntity(sw, l.getX(), l.getY(), l.getZ(), false);
-                sw.addLightningBolt(ent);
+                LightningBoltEntity ent = EntityType.LIGHTNING_BOLT.create(sw);
+                ent.moveForced(l.getPos());
+                sw.addEntity(ent);
                 return ent;
             }
 
-            Entity entity = EntityType.func_220335_a(compoundnbt, sw, (ent) -> {
+            Entity entity = EntityType.loadEntityAndExecute(compoundnbt, sw, (ent) -> {
                 ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), ent.rotationYaw, ent.rotationPitch);
                 return sw.summonEntity(ent) ? ent : null;
             });
             if(entity != null && entity instanceof MobEntity) {
-                ((MobEntity) entity).onInitialSpawn(sw, sw.getDifficultyForLocation(new BlockPos(entity)), SpawnReason.COMMAND, null, null);
+                ((MobEntity) entity).onInitialSpawn(sw, sw.getDifficultyForLocation(entity.getPosition()), SpawnReason.COMMAND, null, null);
             }
             return entity;
         });
@@ -254,7 +255,7 @@ public class EntityCommands {
             return Utils.getEntities((Entity) o, in[1].getDouble(sc));
         });
         sm.registerConsumer("entity.setspeed", (sc, in) -> {
-            ((LivingEntity) in[0].get(sc)).getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(in[1].getDouble(sc));
+            ((LivingEntity) in[0].get(sc)).getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(in[1].getDouble(sc));
         });
         sm.registerConsumer("entity.setgrowingage", (sc, in) -> {
             ((AgeableEntity) in[0].get(sc)).setGrowingAge(in[1].getInt(sc));
@@ -263,7 +264,7 @@ public class EntityCommands {
         sm.registerFunction("entity.issneaking", (sc, in) -> ((Entity) in[0].get(sc)).isCrouching());
         sm.registerFunction("entity.issneaking", (sc, in) -> ((Entity) in[0].get(sc)).isCrouching());
         sm.registerFunction("sheep.issheared", (sc, in) -> ((SheepEntity) in[0].get(sc)).getSheared());
-        sm.registerFunction("sheep.getcolor", (sc, in) -> ((SheepEntity) in[0].get(sc)).getFleeceColor().getName());
+        sm.registerFunction("sheep.getcolor", (sc, in) -> ((SheepEntity) in[0].get(sc)).getFleeceColor().toString());
         sm.registerConsumer("creeper.explode", (sc, in) -> ((CreeperEntity) in[0].get(sc)).ignite());
     }
 
@@ -283,20 +284,20 @@ public class EntityCommands {
             ((EntityItemProjectile) launch).setHeadingFromThrower(liv, liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
         } else if(SnowballEntity.class == projectile) {
             launch = new SnowballEntity(w, liv);
-            ((SnowballEntity) launch).shoot(liv, liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
+            ((SnowballEntity) launch).shoot(liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
         } else if(EggEntity.class == projectile) {
             launch = new EggEntity(w, liv);
-            ((EggEntity) launch).shoot(liv, liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
+            ((EggEntity) launch).shoot(liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
         } else if(EnderPearlEntity.class == projectile) {
             launch = new EnderPearlEntity(w, liv);
-            ((EnderPearlEntity) launch).shoot(liv, liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
+            ((EnderPearlEntity) launch).shoot(liv.rotationPitch, liv.rotationYaw, 0.0f, 1.5f, 1.0f);
         } else if(PotionEntity.class == projectile) {
             launch = new PotionEntity(w, liv);
             ((PotionEntity) launch).setItem((ItemStack) data);
-            ((PotionEntity) launch).shoot(liv, liv.rotationPitch, liv.rotationYaw, -20.0f, 0.5f, 1.0f);
+            ((PotionEntity) launch).shoot(liv.rotationPitch, liv.rotationYaw, -20.0f, 0.5f, 1.0f);
         } else if(ExperienceBottleEntity.class == projectile) {
             launch = new ExperienceBottleEntity(w, liv);
-            ((ExperienceBottleEntity) launch).shoot(liv, liv.rotationPitch, liv.rotationYaw, -20.0f, 0.7f, 1.0f);
+            ((ExperienceBottleEntity) launch).shoot(liv.rotationPitch, liv.rotationYaw, -20.0f, 0.7f, 1.0f);
         } else if(AbstractArrowEntity.class.isAssignableFrom(projectile)) {
             if(SpectralArrowEntity.class == projectile) {
                 launch = new SpectralArrowEntity(w, liv);
@@ -306,9 +307,9 @@ public class EntityCommands {
                     ((ArrowEntity) launch).setPotionEffect((ItemStack) data);
                 }
             }
-            ((AbstractArrowEntity) launch).shoot(liv, liv.rotationPitch, liv.rotationYaw, 0.0F, 3.0F, 1.0F);
+            ((AbstractArrowEntity) launch).shoot(liv.rotationPitch, liv.rotationYaw, 0.0F, 3.0F, 1.0F);
         } else if(DamagingProjectileEntity.class.isAssignableFrom(projectile)) {
-            Vec3d v = liv.getLookVec().scale(10);
+            Vector3d v = liv.getLookVec().scale(10);
             if(SmallFireballEntity.class == projectile) {
                 launch = new SmallFireballEntity(w, liv, v.x, v.y, v.z);
             } else if(WitherSkullEntity.class == projectile) {

+ 1 - 1
src/main/java/me/km/snuviscript/commands/HumanCommands.java

@@ -10,7 +10,7 @@ public class HumanCommands {
     public static void registerFunctions(ScriptManager sm) {
         sm.registerFunction("human.spawn", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
-            World w = l.getWorld().getWorld();
+            World w = l.getWorld();
             EntityHuman h = ModEntities.HUMAN.create(w);
             h.setPosition(l.getX(), l.getY(), l.getZ());
             w.addEntity(h);

+ 7 - 3
src/main/java/me/km/snuviscript/commands/ItemCommands.java

@@ -7,7 +7,9 @@ import me.km.utils.ItemStackUtils;
 import me.km.utils.Location;
 import me.km.utils.Mapper;
 import net.minecraft.block.Block;
+import net.minecraft.entity.ai.attributes.Attribute;
 import net.minecraft.entity.ai.attributes.AttributeModifier;
+import net.minecraft.entity.ai.attributes.Attributes;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.inventory.EquipmentSlotType;
 import net.minecraft.item.Item;
@@ -21,13 +23,14 @@ import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.world.World;
+import net.minecraftforge.registries.ForgeRegistries;
 
 public class ItemCommands {
 
     public static void registerFunctions(ScriptManager sm) {
         sm.registerConsumer("item.drop", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
-            World w = l.getWorld().getWorld();
+            World w = l.getWorld();
             BlockPos pos = l.getBlockPos();
             ItemStack stack = ((ItemStack) in[1].get(sc)).copy();
             int amount = stack.getCount();
@@ -50,7 +53,7 @@ public class ItemCommands {
         sm.registerConsumer("item.setamount", (sc, in) -> ((ItemStack) in[0].get(sc)).setCount(in[1].getInt(sc)));
         sm.registerFunction("item.getfulltext", (sc, in) -> ((ItemStack) in[0].get(sc)).getTextComponent());
         sm.registerFunction("item.hasname", (sc, in) -> ((ItemStack) in[0].get(sc)).hasDisplayName());
-        sm.registerFunction("item.getname", (sc, in) -> ((ItemStack) in[0].get(sc)).getDisplayName().getFormattedText());
+        sm.registerFunction("item.getname", (sc, in) -> ((ItemStack) in[0].get(sc)).getDisplayName().getString());
         sm.registerConsumer("item.setname", (sc, in) -> {
             ((ItemStack) in[0].get(sc)).setDisplayName(new StringTextComponent(SnuviUtils.connect(sc, in, 1)));
         });
@@ -102,7 +105,8 @@ public class ItemCommands {
             return true;
         });
         sm.registerConsumer("item.addattribute", (sc, in) -> {
-            ((ItemStack) in[0].get(sc)).addAttributeModifier(in[1].getString(sc),
+            Attribute a = ForgeRegistries.ATTRIBUTES.getValue(new ResourceLocation(in[1].getString(sc)));
+            ((ItemStack) in[0].get(sc)).addAttributeModifier(a,
                     new AttributeModifier("modifier", in[3].getDouble(sc),
                             AttributeModifier.Operation.values()[in[4].getInt(sc)]),
                     (EquipmentSlotType) in[2].get(sc));

+ 2 - 2
src/main/java/me/km/snuviscript/commands/ItemEntityCommands.java

@@ -14,11 +14,11 @@ public class ItemEntityCommands {
         });
         sm.registerFunction("item.entity.new", (sc, in) -> {
             Location l = (Location) in[0].get(sc);
-            ItemEntity item = new ItemEntity(EntityType.ITEM, l.getWorld().getWorld());
+            ItemEntity item = new ItemEntity(EntityType.ITEM, l.getWorld());
             item.setPosition(l.getX(), l.getY(), l.getZ());
             ItemStack stack = (ItemStack) in[1].get(sc);
             item.setItem(stack);
-            item.lifespan = stack.getEntityLifespan(l.getWorld().getWorld());
+            item.lifespan = stack.getEntityLifespan(l.getWorld());
             return item;
         });
         sm.registerConsumer("item.entity.spawn", (sc, in) -> {

+ 19 - 17
src/main/java/me/km/snuviscript/commands/LivingCommands.java

@@ -8,40 +8,42 @@ import me.km.utils.Utils;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.MobEntity;
-import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.entity.ai.attributes.Attribute;
 import net.minecraft.entity.ai.attributes.AttributeModifier;
-import net.minecraft.entity.ai.attributes.IAttribute;
-import net.minecraft.entity.ai.attributes.IAttributeInstance;
+import net.minecraft.entity.ai.attributes.ModifiableAttributeInstance;
+import net.minecraftforge.registries.ForgeRegistries;
 
 public class LivingCommands {
+    private static String getName(Attribute attribute) {
+        String name = attribute.getAttributeName();
+        int index = name.indexOf(".");
+        if(index != -1) {
+            name = name.substring(index + 1);
+        }
+        name = name.replace("_", "");
+        name = name.toLowerCase();
+        return name;
+    }
 
     public static void registerFunctions(ScriptManager sm) {
-        IAttribute[] attributes = new IAttribute[]{
-            SharedMonsterAttributes.ARMOR, SharedMonsterAttributes.ARMOR_TOUGHNESS,
-            SharedMonsterAttributes.ATTACK_DAMAGE, SharedMonsterAttributes.ATTACK_KNOCKBACK,
-            SharedMonsterAttributes.ATTACK_SPEED, SharedMonsterAttributes.FLYING_SPEED,
-            SharedMonsterAttributes.FOLLOW_RANGE, SharedMonsterAttributes.KNOCKBACK_RESISTANCE,
-            SharedMonsterAttributes.LUCK, SharedMonsterAttributes.MAX_HEALTH,
-            SharedMonsterAttributes.MOVEMENT_SPEED
-        };
-        for(IAttribute attribute : attributes) {
-            String name = attribute.getName().substring(8).toLowerCase();
+        for(Attribute attribute : ForgeRegistries.ATTRIBUTES.getValues()) {
+            String name = getName(attribute);
             sm.registerConsumer("living.set" + name, (sc, in) -> {
-                IAttributeInstance a = ((LivingEntity) in[0].get(sc)).getAttribute(attribute);
+                ModifiableAttributeInstance a = ((LivingEntity) in[0].get(sc)).getAttribute(attribute);
                 if(a == null) {
                     return;
                 }
                 double amount = in[1].getDouble(sc) - a.getBaseValue();
                 UUID uuid = new UUID(name.length(), name.hashCode());
                 a.removeModifier(uuid);
-                a.applyModifier(new AttributeModifier(uuid, name, amount, AttributeModifier.Operation.ADDITION));
+                a.applyNonPersistentModifier(new AttributeModifier(uuid, name, amount, AttributeModifier.Operation.ADDITION));
             });
             sm.registerFunction("living.get" + name, (sc, in) -> {
-                IAttributeInstance a = ((LivingEntity) in[0].get(sc)).getAttribute(attribute);
+                ModifiableAttributeInstance a = ((LivingEntity) in[0].get(sc)).getAttribute(attribute);
                 return a == null ? null : a.getValue();
             });
             sm.registerFunction("living.getbase" + name, (sc, in) -> {
-                IAttributeInstance a = ((LivingEntity) in[0].get(sc)).getAttribute(attribute);
+                ModifiableAttributeInstance a = ((LivingEntity) in[0].get(sc)).getAttribute(attribute);
                 return a == null ? null : a.getBaseValue();
             });
         }

+ 3 - 3
src/main/java/me/km/snuviscript/commands/LocationCommands.java

@@ -3,7 +3,7 @@ package me.km.snuviscript.commands;
 import me.hammerle.snuviscript.code.ScriptManager;
 import me.km.utils.Location;
 import me.km.utils.LocationIterator;
-import me.km.world.WorldManager;
+import me.km.utils.Utils;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.MathHelper;
 import net.minecraft.world.IWorld;
@@ -59,7 +59,7 @@ public class LocationCommands {
                 case "bz":
                     return (double) MathHelper.floor(l.getZ());
                 case "w":
-                    return WorldManager.getName(l.getWorld());
+                    return Utils.getWorldName(l.getWorld());
                 default:
                     return null;
             }
@@ -92,7 +92,7 @@ public class LocationCommands {
             }
         });
         sm.registerFunction("loc.iterator", (sc, in) -> {
-            return new LocationIterator((IWorld) in[0].get(sc),
+            return new LocationIterator((World) in[0].get(sc),
                     in[1].getInt(sc), in[2].getInt(sc), in[3].getInt(sc),
                     in[4].getInt(sc), in[5].getInt(sc), in[6].getInt(sc));
         });

+ 13 - 11
src/main/java/me/km/snuviscript/commands/PlayerCommands.java

@@ -28,14 +28,14 @@ import net.minecraft.network.ThreadQuickExitException;
 import net.minecraft.network.play.client.CChatMessagePacket;
 import net.minecraft.network.play.client.CClientStatusPacket;
 import net.minecraft.network.play.server.SPlayerListItemPacket;
-import net.minecraft.network.play.server.SSpawnPositionPacket;
+import net.minecraft.network.play.server.SWorldSpawnChangedPacket;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.tileentity.SkullTileEntity;
 import net.minecraft.util.DamageSource;
 import net.minecraft.util.math.BlockRayTraceResult;
 import net.minecraft.util.math.RayTraceContext;
 import net.minecraft.util.math.RayTraceResult;
-import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.math.vector.Vector3d;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.world.GameType;
 import net.minecraft.world.World;
@@ -84,7 +84,8 @@ public class PlayerCommands {
             sendMessageToGroup(server, scripts, perms, in[0].get(sc), sc, concat(sc, 2, "[" + in[1].getString(sc) + "§r] ", in));
         });
         sm.registerConsumer("player.setcompass", (sc, in) -> {
-            ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new SSpawnPositionPacket(((Location) in[1].get(sc)).getBlockPos()));
+            ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new SWorldSpawnChangedPacket(
+                    ((Location) in[1].get(sc)).getBlockPos(), in.length > 2 ? in[2].getFloat(sc) : 0.0f));
         });
         sm.registerFunction("player.gethunger", (sc, in) -> (double) ((PlayerEntity) in[0].get(sc)).getFoodStats().getFoodLevel());
         sm.registerConsumer("player.sethunger", (sc, in) -> {
@@ -97,7 +98,7 @@ public class PlayerCommands {
         sm.registerFunction("player.getname", (sc, in) -> {
             Object o = in[0].get(sc);
             if(o instanceof PlayerEntity) {
-                return ((PlayerEntity) o).getName().getFormattedText();
+                return ((PlayerEntity) o).getName().getString();
             }
             GameProfile gp = server.getPlayerProfileCache().getProfileByUUID(getUUID(o));
             if(gp == null) {
@@ -186,9 +187,9 @@ public class PlayerCommands {
                 fm = RayTraceContext.FluidMode.ANY;
             }
 
-            Vec3d start = p.getEyePosition(0.0f);
-            Vec3d unit = p.getLook(0.0f);
-            Vec3d end = start.add(unit.x * radius, unit.y * radius, unit.z * radius);
+            Vector3d start = p.getEyePosition(0.0f);
+            Vector3d unit = p.getLook(0.0f);
+            Vector3d end = start.add(unit.x * radius, unit.y * radius, unit.z * radius);
 
             BlockRayTraceResult result = p.world.rayTraceBlocks(new RayTraceContext(start, end, bm, fm, p));
 
@@ -211,13 +212,14 @@ public class PlayerCommands {
             ((ServerPlayerEntity) in[0].get(sc)).connection.disconnect(new StringTextComponent(in[1].getString(sc)));
         });
         sm.registerFunction("player.getspawn", (sc, in) -> {
-            ServerWorld ws = (ServerWorld) in[1].get(sc);
-            return new Location(ws, ((PlayerEntity) in[0].get(sc)).getBedLocation(ws.getDimension().getType()));
+            ServerPlayerEntity p = (ServerPlayerEntity) in[0].get(sc);
+            return new Location(p.world, p.func_241140_K_());
         });
         sm.registerAlias("player.getspawn", "player.getbedspawn");
         sm.registerConsumer("player.setspawn", (sc, in) -> {
             Location l = (Location) in[1].get(sc);
-            ((ServerPlayerEntity) in[0].get(sc)).setSpawnPoint(l.getBlockPos(), true, false, l.getWorld().getDimension().getType());
+            ((ServerPlayerEntity) in[0].get(sc)).func_242111_a(((ServerWorld) l.getWorld()).getDimensionKey(), 
+                    l.getBlockPos(), in.length > 2 ? in[2].getFloat(sc) : 0.0f, true, false);
         });
         sm.registerAlias("player.setspawn", "player.setbedspawn");
         sm.registerConsumer("player.damageitem", (sc, in) -> {
@@ -226,7 +228,7 @@ public class PlayerCommands {
             });
         });
         sm.registerConsumer("player.damagearmor", (sc, in) -> {
-            ((PlayerEntity) in[0].get(sc)).inventory.damageArmor(in[1].getFloat(sc));
+            ((PlayerEntity) in[0].get(sc)).inventory.func_234563_a_((DamageSource) in[2].get(sc), in[1].getFloat(sc));
         });
         sm.registerConsumer("player.openenderchest", (sc, in) -> {
             PlayerEntity p1 = (PlayerEntity) in[0].get(sc);

+ 4 - 4
src/main/java/me/km/snuviscript/commands/PlotCommands.java

@@ -5,7 +5,7 @@ import me.km.overrides.ModEntityPlayerMP;
 import me.km.plots.PlotMap;
 import me.km.plots.WorldPlotMap;
 import me.km.utils.Location;
-import net.minecraft.world.IWorld;
+import net.minecraft.world.World;
 
 public class PlotCommands {
     public static void registerFunctions(ScriptManager sm, WorldPlotMap plots) {
@@ -36,7 +36,7 @@ public class PlotCommands {
             return plots.add(l1.getWorld(), l1.getBlockPos(), l2.getBlockPos());
         });
         sm.registerConsumer("plot.remove", (sc, in) -> {
-            plots.remove((IWorld) in[1].get(sc), (PlotMap.Plot) in[0].get(sc));
+            plots.remove((World) in[1].get(sc), (PlotMap.Plot) in[0].get(sc));
         });
         sm.registerFunction("plot.getname", (sc, in) -> ((PlotMap.Plot) in[0].get(sc)).getName());
         sm.registerConsumer("plot.setname", (sc, in) -> {
@@ -44,13 +44,13 @@ public class PlotCommands {
         });
         sm.registerFunction("plot.getid", (sc, in) -> (double) ((PlotMap.Plot) in[0].get(sc)).getId());
         sm.registerFunction("plot.iterator", (sc, in) -> {
-            IWorld word = (IWorld) in[0].get(sc);
+            World word = (World) in[0].get(sc);
             if(in.length >= 2) {
                 plots.getIterator(word, CommandUtils.getUUID(in[1].get(sc)));
             }
             return plots.getIterator(word);
         });
-        sm.registerFunction("plot.intersecting", (sc, in) -> plots.getIntersectingPlots((IWorld) in[0].get(sc), in[1].getInt(sc),
+        sm.registerFunction("plot.intersecting", (sc, in) -> plots.getIntersectingPlots((World) in[0].get(sc), in[1].getInt(sc),
                 in[2].getInt(sc), in[3].getInt(sc), in[4].getInt(sc),
                 in[5].getInt(sc), in[6].getInt(sc)));
         sm.registerFunction("plot.getminx", (sc, in) -> (double) ((PlotMap.Plot) in[0].get(sc)).getMinX());

+ 1 - 1
src/main/java/me/km/snuviscript/commands/ReadCommands.java

@@ -51,7 +51,7 @@ public class ReadCommands {
             Location l = (Location) in[0].get(sc);
             ServerWorld sw = (ServerWorld) l.getWorld();
             CompoundNBT compoundnbt = JsonToNBT.getTagFromJson(SnuviUtils.connect(sc, in, 1));
-            Entity entity = EntityType.func_220335_a(compoundnbt, sw, (ent) -> {
+            Entity entity = EntityType.loadEntityAndExecute(compoundnbt, sw, (ent) -> {
                 ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), ent.rotationYaw, ent.rotationPitch);
                 return sw.summonEntity(ent) ? ent : null;
             });

+ 13 - 36
src/main/java/me/km/snuviscript/commands/WorldCommands.java

@@ -4,36 +4,30 @@ import java.util.ArrayList;
 import java.util.stream.Collectors;
 import me.hammerle.snuviscript.code.ScriptManager;
 import me.km.utils.Location;
-import me.km.utils.Mapper;
-import me.km.utils.ReflectionUtils;
-import me.km.world.WorldManager;
+import me.km.utils.Utils;
 import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.Difficulty;
-import net.minecraft.world.GameRules;
 import net.minecraft.world.World;
 import net.minecraft.world.server.ServerWorld;
-import net.minecraft.world.storage.WorldInfo;
 
 public class WorldCommands {
     @SuppressWarnings("")
     public static void registerFunctions(ScriptManager sm, MinecraftServer server) {
         sm.registerAlias("players.toworldlist", "world.getplayers");
-        sm.registerFunction("world.register", (sc, in) -> WorldManager.register(in[0].getString(sc)));
-        sm.registerFunction("world.unregister", (sc, in) -> WorldManager.unregister(server, in[0].getString(sc)));
-        sm.registerFunction("world.get", (sc, in) -> WorldManager.get(server, in[0].getString(sc)));
-        sm.registerFunction("world.getname", (sc, in) -> WorldManager.getName((World) in[0].get(sc)));
+        sm.registerFunction("world.get", (sc, in) -> Utils.getWorldFromName(server, in[0].getString(sc)));
+        sm.registerFunction("world.getname", (sc, in) -> Utils.getWorldName((World) in[0].get(sc)));
         sm.registerConsumer("world.setdiffi", (sc, in) -> {
-            Difficulty diffi = Difficulty.valueOf(in[1].getString(sc).toUpperCase());
-            ((World) in[0].get(sc)).getWorldInfo().setDifficulty(diffi);
+            server.setDifficultyForAllWorlds(Difficulty.valueOf(in[1].getString(sc).toUpperCase()), true);
         });
         sm.registerConsumer("world.setspawn", (sc, in) -> {
             Location l = ((Location) in[0].get(sc));
-            l.getWorld().getWorldInfo().setSpawn(l.getBlockPos());
+            ((ServerWorld) l.getWorld()).func_241124_a__(l.getBlockPos(), in.length > 0 ? in[1].getFloat(sc) : 0.0f);
         });
         sm.registerFunction("world.getspawn", (sc, in) -> {
-            World w = (World) in[0].get(sc);
-            WorldInfo info = w.getWorldInfo();
-            return new Location(w, info.getSpawnX(), info.getSpawnY(), info.getSpawnZ(), 0.0f, 0.0f);
+            ServerWorld w = (ServerWorld) in[0].get(sc);
+            BlockPos pos = w.getSpawnPoint();
+            return new Location(w, pos.getX(), pos.getY(), pos.getZ(), 0.0f, 0.0f);
         });
         sm.registerFunction("world.getall", (sc, in) -> {
             ArrayList<World> worlds = new ArrayList<>();
@@ -42,34 +36,17 @@ public class WorldCommands {
             }
             return worlds;
         });
-        sm.registerConsumer("world.settime", (sc, in) -> ((World) in[0].get(sc)).setDayTime(in[1].getLong(sc)));
+        sm.registerConsumer("world.settime", (sc, in) -> ((ServerWorld) in[0].get(sc)).setDayTime(in[1].getLong(sc)));
         sm.registerFunction("world.gettime", (sc, in) -> (double) ((World) in[0].get(sc)).getDayTime());
         sm.registerFunction("world.hasstorm", (sc, in) -> ((World) in[0].get(sc)).isRaining());
         sm.registerConsumer("world.clearweather", (sc, in) -> {
-            WorldInfo wi = ((World) in[0].get(sc)).getWorldInfo();
-            wi.setClearWeatherTime(in[1].getInt(sc));
-            wi.setRainTime(0);
-            wi.setThunderTime(0);
-            wi.setRaining(false);
-            wi.setThundering(false);
+            ((ServerWorld) in[0].get(sc)).func_241113_a_(in[1].getInt(sc), 0, false, false);
         });
         sm.registerConsumer("world.setrain", (sc, in) -> {
-            WorldInfo wi = ((World) in[0].get(sc)).getWorldInfo();
-            wi.setClearWeatherTime(0);
-            int i = in[1].getInt(sc);
-            wi.setRainTime(i);
-            wi.setThunderTime(i);
-            wi.setRaining(true);
-            wi.setThundering(false);
+            ((ServerWorld) in[0].get(sc)).getWorld().func_241113_a_(0, in[1].getInt(sc), true, false);
         });
         sm.registerConsumer("world.setthunder", (sc, in) -> {
-            WorldInfo wi = ((World) in[0].get(sc)).getWorldInfo();
-            wi.setClearWeatherTime(0);
-            int i = in[1].getInt(sc);
-            wi.setRainTime(i);
-            wi.setThunderTime(i);
-            wi.setRaining(true);
-            wi.setThundering(true);
+            ((ServerWorld) in[0].get(sc)).getWorld().func_241113_a_(0, in[1].getInt(sc), true, true);
         });
         sm.registerFunction("world.getentities", (sc, in) -> {
             return ((ServerWorld) in[0].get(sc)).getEntities().collect(Collectors.toList());

+ 0 - 16
src/main/java/me/km/utils/ClientReflectionUtils.java

@@ -3,7 +3,6 @@ package me.km.utils;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.Map;
-import me.km.overrides.ModPlayerRenderer;
 import static me.km.utils.ReflectionUtils.getField;
 import static me.km.utils.ReflectionUtils.getMethod;
 import net.minecraft.client.Minecraft;
@@ -34,19 +33,4 @@ public class ClientReflectionUtils {
     public static boolean isRenderingBossBar() {
         return !ReflectionUtils.getFieldValue(Map.class, Minecraft.getInstance().ingameGUI.getBossOverlay(), BOSS_BAR_MAP).isEmpty();
     }
-
-    private final static Field SKIN_MAP = getField(EntityRendererManager.class, "field_178636_l"); // skinMap
-    private final static Field PLAYER_RENDERER = getField(EntityRendererManager.class, "field_178637_m"); // playerRenderer
-
-    public static void updatePlayerRenderer() {
-        EntityRendererManager erm = Minecraft.getInstance().getRenderManager();
-        ModPlayerRenderer normal = new ModPlayerRenderer(erm, false);
-        ModPlayerRenderer slim = new ModPlayerRenderer(erm, true);
-
-        ReflectionUtils.setFieldValue(erm, PLAYER_RENDERER, normal);
-        Map<String, PlayerRenderer> map
-                = ReflectionUtils.getFieldValue(Map.class, erm, SKIN_MAP);
-        map.put("default", normal);
-        map.put("slim", slim);
-    }
 }

+ 0 - 82
src/main/java/me/km/utils/ExplosionUtils.java

@@ -1,82 +0,0 @@
-package me.km.utils;
-
-import com.google.common.collect.Sets;
-import java.util.Set;
-import net.minecraft.block.BlockState;
-import net.minecraft.entity.Entity;
-import net.minecraft.fluid.IFluidState;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Vec3d;
-import net.minecraft.world.Explosion;
-import net.minecraft.world.World;
-
-public class ExplosionUtils {
-    public static void explosion(Explosion ex, World w) {
-        ex.getAffectedBlockPositions().clear();
-
-        ReflectionUtils.setNoBreakMode(ex);
-        Vec3d pos = ex.getPosition();
-
-        Entity exploder = ReflectionUtils.getExploder(ex);
-        float size = ReflectionUtils.getSize(ex);
-
-        ex.getAffectedBlockPositions().addAll(getAffectedBlocks(ex, w, size, pos.x, pos.y, pos.z, exploder));
-    }
-
-    private static Set<BlockPos> getAffectedBlocks(Explosion ex, World w, float size, double x, double y, double z, Entity exploder) {
-        Set<BlockPos> set = Sets.newHashSet();
-        for(int j = 0; j < 16; ++j) {
-            for(int k = 0; k < 16; ++k) {
-                for(int l = 0; l < 16; ++l) {
-                    if(j == 0 || j == 15 || k == 0 || k == 15 || l == 0 || l == 15) {
-                        // calc direction vector
-                        double dirX = j / 7.5 - 1.0;
-                        double dirY = k / 7.5 - 1.0;
-                        double dirZ = l / 7.5 - 1.0;
-                        double dirLength = Math.sqrt(dirX * dirX + dirY * dirY + dirZ * dirZ);
-                        dirX /= dirLength;
-                        dirY /= dirLength;
-                        dirZ /= dirLength;
-                        // scale to the right size, moved outside of the loop
-                        dirX *= 0.3;
-                        dirY *= 0.3;
-                        dirZ *= 0.3;
-
-                        float strength = size * (0.7f + w.rand.nextFloat() * 0.6f);
-                        double currentX = x;
-                        double currentY = y;
-                        double currentZ = z;
-
-                        for(; strength > 0.0f; strength -= 0.225f) {
-                            BlockPos pos = new BlockPos(currentX, currentY, currentZ);
-                            BlockState state = w.getBlockState(pos);
-                            IFluidState fState = w.getFluidState(pos);
-                            if(!state.isAir(w, pos) || !fState.isEmpty()) {
-                                float resistance = Math.max(state.getExplosionResistance(w, pos, exploder, ex), fState.getExplosionResistance(w, pos, exploder, ex));
-                                if(exploder != null) {
-                                    resistance = exploder.getExplosionResistance(ex, w, pos, state, fState, resistance);
-                                }
-
-                                // make explosives stronger, keep strong resistance but lower low resistance
-                                if(resistance <= 10) {
-                                    resistance = Math.min(resistance, 1.0f);
-                                }
-
-                                strength -= (resistance + 0.3F) * 0.3F;
-                            }
-
-                            if(strength > 0.0F && (exploder == null || exploder.canExplosionDestroyBlock(ex, w, pos, state, strength))) {
-                                set.add(pos);
-                            }
-
-                            currentX += dirX;
-                            currentY += dirY;
-                            currentZ += dirZ;
-                        }
-                    }
-                }
-            }
-        }
-        return set;
-    }
-}

+ 1 - 1
src/main/java/me/km/utils/ItemStackUtils.java

@@ -29,7 +29,7 @@ public class ItemStackUtils {
         ListNBT nbtList = com.getList("Lore", 8);
         ArrayList<Object> list = new ArrayList<>();
         for(int i = 0; i < nbtList.size(); i++) {
-            list.add(ITextComponent.Serializer.fromJson(nbtList.getString(i)).getString());
+            list.add(ITextComponent.Serializer.getComponentFromJson(nbtList.getString(i)).getString());
         }
         return list;
     }

+ 18 - 15
src/main/java/me/km/utils/Location.java

@@ -2,24 +2,27 @@ package me.km.utils;
 
 import java.util.Objects;
 import java.util.regex.PatternSyntaxException;
-import me.km.world.WorldManager;
 import net.minecraft.block.BlockState;
 import net.minecraft.entity.Entity;
 import net.minecraft.server.MinecraftServer;
+import net.minecraft.util.RegistryKey;
+import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.MathHelper;
-import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.math.vector.Vector3d;
+import net.minecraft.util.registry.Registry;
 import net.minecraft.world.IWorld;
+import net.minecraft.world.World;
 
 public class Location {
-    private final IWorld w;
+    private final World w;
     private double x;
     private double y;
     private double z;
     private float yaw;
     private float pitch;
 
-    public Location(IWorld w, double x, double y, double z, float yaw, float pitch) {
+    public Location(World w, double x, double y, double z, float yaw, float pitch) {
         this.w = w;
         this.x = x;
         this.y = y;
@@ -28,19 +31,19 @@ public class Location {
         this.pitch = pitch;
     }
 
-    public Location(IWorld w, Vec3d pos, float yaw, float pitch) {
+    public Location(World w, Vector3d pos, float yaw, float pitch) {
         this(w, pos.x, pos.y, pos.z, yaw, pitch);
     }
 
-    public Location(IWorld w, Vec3d pos) {
+    public Location(World w, Vector3d pos) {
         this(w, pos, 0, 0);
     }
 
-    public Location(IWorld w, BlockPos pos, float yaw, float pitch) {
+    public Location(World w, BlockPos pos, float yaw, float pitch) {
         this(w, pos.getX(), pos.getY(), pos.getZ(), yaw, pitch);
     }
 
-    public Location(IWorld w, BlockPos pos) {
+    public Location(World w, BlockPos pos) {
         this(w, pos, 0, 0);
     }
 
@@ -52,7 +55,7 @@ public class Location {
         try {
             String[] parts = location.split(":");
             if(parts.length >= 6) {
-                this.w = WorldManager.get(server, parts[0]);
+                this.w = Utils.getWorldFromName(server, location);
                 this.x = Double.parseDouble(parts[1]);
                 this.y = Double.parseDouble(parts[2]);
                 this.z = Double.parseDouble(parts[3]);
@@ -60,7 +63,7 @@ public class Location {
                 this.pitch = Float.parseFloat(parts[5]);
                 return;
             } else if(parts.length >= 4) {
-                this.w = WorldManager.get(server, parts[0]);
+                this.w = Utils.getWorldFromName(server, parts[0]);
                 this.x = Double.parseDouble(parts[1]);
                 this.y = Double.parseDouble(parts[2]);
                 this.z = Double.parseDouble(parts[3]);
@@ -157,12 +160,12 @@ public class Location {
         this.z = MathHelper.floor(this.z);
     }
 
-    public IWorld getWorld() {
+    public World getWorld() {
         return w;
     }
 
-    public Vec3d getPos() {
-        return new Vec3d(x, y, z);
+    public Vector3d getPos() {
+        return new Vector3d(x, y, z);
     }
 
     public BlockPos getBlockPos() {
@@ -195,7 +198,7 @@ public class Location {
 
     @Override
     public String toString() {
-        StringBuilder sb = new StringBuilder(WorldManager.getName(w));
+        StringBuilder sb = new StringBuilder(Utils.getWorldName(w));
         sb.append(":");
         sb.append(x);
         sb.append(":");
@@ -210,7 +213,7 @@ public class Location {
     }
 
     public String toBlockString() {
-        StringBuilder sb = new StringBuilder(WorldManager.getName(w));
+        StringBuilder sb = new StringBuilder(Utils.getWorldName(w));
         sb.append(":");
         sb.append(MathHelper.floor(x));
         sb.append(":");

+ 2 - 2
src/main/java/me/km/utils/LocationIterator.java

@@ -1,7 +1,7 @@
 package me.km.utils;
 
 import java.util.Iterator;
-import net.minecraft.world.IWorld;
+import net.minecraft.world.World;
 
 public class LocationIterator implements Iterator<Location> {
     private final int minX;
@@ -15,7 +15,7 @@ public class LocationIterator implements Iterator<Location> {
     private int y;
     private int z;
 
-    public LocationIterator(IWorld world, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
+    public LocationIterator(World world, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) {
         this.minX = minX;
         this.minY = minY;
         this.maxX = maxX;

+ 2 - 2
src/main/java/me/km/utils/Mapper.java

@@ -5,7 +5,7 @@ import net.minecraft.enchantment.Enchantment;
 import net.minecraft.item.Item;
 import net.minecraft.particles.ParticleType;
 import net.minecraft.potion.Effect;
-import net.minecraft.state.IProperty;
+import net.minecraft.state.Property;
 import net.minecraft.state.properties.BlockStateProperties;
 import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.SoundCategory;
@@ -46,7 +46,7 @@ public class Mapper {
         return ForgeRegistries.BLOCKS.getValue(new ResourceLocation(name));
     }
 
-    public static IProperty getProperty(String name) {
+    public static Property getProperty(String name) {
         switch(name) {
             case "attached":
                 return BlockStateProperties.ATTACHED;

+ 21 - 60
src/main/java/me/km/utils/ReflectionUtils.java

@@ -8,8 +8,10 @@ import java.lang.reflect.Method;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
+import net.minecraft.block.Block;
+import net.minecraft.block.Blocks;
+import net.minecraft.block.FireBlock;
 import net.minecraft.command.Commands;
-import net.minecraft.entity.Entity;
 import net.minecraft.entity.ai.goal.GoalSelector;
 import net.minecraft.entity.ai.goal.PrioritizedGoal;
 import net.minecraft.entity.player.PlayerAbilities;
@@ -26,12 +28,9 @@ import net.minecraft.world.IWorld;
 import net.minecraft.world.World;
 import net.minecraft.world.biome.Biome;
 import net.minecraft.world.biome.provider.BiomeProvider;
-import net.minecraft.world.biome.provider.BiomeProviderType;
-import net.minecraft.world.biome.provider.IBiomeProviderSettings;
 import net.minecraft.world.gen.feature.IFeatureConfig;
 import net.minecraft.world.gen.feature.structure.Structure;
-import net.minecraft.world.storage.WorldInfo;
-import net.minecraftforge.common.DimensionManager;
+import net.minecraft.world.storage.PlayerData;
 import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
 import static net.minecraftforge.fml.common.ObfuscationReflectionHelper.remapName;
 import org.apache.logging.log4j.LogManager;
@@ -186,22 +185,7 @@ public class ReflectionUtils {
         setFieldValue(server, COMMAND_MANAGER, manager);
     }
 
-    // -----------------------------------------------------------------------------------
-    // DimensionManager
-    // -----------------------------------------------------------------------------------
-    private final static Field SAVED_ENTRIES = getField(DimensionManager.class, "savedEntries"); // forge name
-
-    public static void removeDimensionSaveEntry(ResourceLocation rl) {
-        // the map seems to be always empty ...
-        getFieldValue(Map.class, null, SAVED_ENTRIES).remove(rl);
-    }
-
-    // -----------------------------------------------------------------------------------
-    // explosion stuff
-    // -----------------------------------------------------------------------------------
     private final static Field MODE = getField(Explosion.class, "field_222260_b"); // mode
-    private final static Field EXPLODER = getField(Explosion.class, "field_77283_e"); // exploder
-    private final static Field SIZE = getField(Explosion.class, "field_77280_f"); // size
 
     public static void setNoBreakMode(Explosion ex) {
         Explosion.Mode mode = getFieldValue(Explosion.Mode.class, ex, MODE);
@@ -210,43 +194,12 @@ public class ReflectionUtils {
         }
     }
 
-    public static Entity getExploder(Explosion ex) {
-        return getFieldValue(Entity.class, ex, EXPLODER);
-    }
-
-    public static float getSize(Explosion ex) {
-        return getFloat(ex, SIZE, 1);
-    }
-
-    // -----------------------------------------------------------------------------------
-    // world info
-    // -----------------------------------------------------------------------------------
-    private final static Field WORLD_INFO = getField(World.class, "field_72986_A"); // worldInfo
-
-    public static void setWorldInfo(World w, WorldInfo info) {
-        setFieldValue(w, WORLD_INFO, info);
-    }
-
-    // -----------------------------------------------------------------------------------
-    // gamerule integer value
-    // -----------------------------------------------------------------------------------
     private final static Field INTEGER_VALUE = getField(GameRules.IntegerValue.class, "field_223566_a"); // value
 
     public static void setIntegerValue(GameRules.IntegerValue rule, int value) {
         setInt(rule, INTEGER_VALUE, value);
     }
 
-    public static <C extends IBiomeProviderSettings, T extends BiomeProvider> BiomeProviderType
-            newBiomeProviderType(Function<C, T> factory, Function<WorldInfo, C> settingsFactory) {
-        try {
-            Constructor<BiomeProviderType> con = (Constructor<BiomeProviderType>) BiomeProviderType.class.getDeclaredConstructors()[0];
-            con.setAccessible(true);
-            return con.newInstance(factory, settingsFactory);
-        } catch(Exception ex) {
-            return null;
-        }
-    }
-
     // -----------------------------------------------------------------------------------
     // game type setter without update for dirty hack
     // -----------------------------------------------------------------------------------
@@ -255,16 +208,7 @@ public class ReflectionUtils {
     public static void setGameType(PlayerInteractionManager m, GameType type) {
         setFieldValue(m, GAME_TYPE, type);
     }
-    
-    // -----------------------------------------------------------------------------------
-    // biome map
-    // -----------------------------------------------------------------------------------
-    private final static Field BIOME_STRUCTURE = getField(Biome.class, "field_201874_aj");
 
-    public static Map<Structure<?>, IFeatureConfig> getBiomeStructures(Biome b) {
-        return getFieldValue(Map.class, b, BIOME_STRUCTURE);
-    }
-    
     // -----------------------------------------------------------------------------------
     // for clearing ai
     // -----------------------------------------------------------------------------------
@@ -273,4 +217,21 @@ public class ReflectionUtils {
     public static Set<PrioritizedGoal> getGoals(GoalSelector gs) {
         return getFieldValue(Set.class, gs, GOALS);
     }
+
+    private final static Method SET_FIRE_INFO = getMethod(FireBlock.class, "func_180686_a");
+
+    public static void setFireInfo(Block b, int encouragement, int flammability) {
+        FireBlock fireblock = (FireBlock) Blocks.FIRE;
+        try {
+            SET_FIRE_INFO.invoke(fireblock, b, encouragement, flammability);
+        } catch(IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
+            LogManager.getLogger().warn("setFireInfo - " + ex);
+        }
+    }
+    
+    private final static Field PLAYER_DATA = getField(MinecraftServer.class, "field_240766_e_");
+
+    public static PlayerData getPlayerDataManager(MinecraftServer ms) {
+        return getFieldValue(PlayerData.class, ms, PLAYER_DATA);
+    }
 }

+ 29 - 24
src/main/java/me/km/utils/Utils.java

@@ -5,26 +5,23 @@ import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.entity.projectile.ArrowEntity;
-import net.minecraft.entity.projectile.DamagingProjectileEntity;
-import net.minecraft.entity.projectile.ThrowableEntity;
+import net.minecraft.entity.projectile.ProjectileEntity;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.math.AxisAlignedBB;
-import net.minecraft.util.math.Vec3d;
 import net.minecraft.world.IWorld;
 import net.minecraft.util.DamageSource;
+import net.minecraft.util.RegistryKey;
+import net.minecraft.util.ResourceLocation;
 import net.minecraft.util.math.RayTraceContext;
 import net.minecraft.util.math.RayTraceResult;
+import net.minecraft.util.math.vector.Vector3d;
+import net.minecraft.util.registry.Registry;
 import net.minecraft.world.World;
 
 public class Utils {
     public static Entity getEntityFromProjectile(Entity ent) {
-        if(ent instanceof ArrowEntity) {
-            return ((ArrowEntity) ent).getShooter();
-        } else if(ent instanceof ThrowableEntity) {
-            return ((ThrowableEntity) ent).getThrower();
-        } else if(ent instanceof DamagingProjectileEntity) {
-            return ( (DamagingProjectileEntity) ent).shootingEntity;
+        if(ent instanceof ProjectileEntity) {
+            return ((ProjectileEntity) ent).func_234616_v_();
         }
         return null;
     }
@@ -47,9 +44,9 @@ public class Utils {
     @SuppressWarnings("unchecked")
     public static <T extends Entity> List<T> getEntities(IWorld w, double x, double y, double z, double radius, Class<T> type) {
         double sqareRadius = radius * radius;
-        return w.getWorld().getEntitiesWithinAABB(type, buildBoxAround(x, y, z, radius), ent -> ent.getDistanceSq(x, y, z) <= sqareRadius);
+        return w.getEntitiesWithinAABB(type, buildBoxAround(x, y, z, radius), ent -> ent.getDistanceSq(x, y, z) <= sqareRadius);
     }
-    
+
     public static List<Entity> getEntities(Entity ent, double radius) {
         double sqareRadius = radius * radius;
         double x = ent.getPosX();
@@ -57,7 +54,7 @@ public class Utils {
         double z = ent.getPosZ();
         return ent.world.getEntitiesInAABBexcluding(ent, buildBoxAround(x, y, z, radius), e -> e.getDistanceSq(x, y, z) <= sqareRadius);
     }
-    
+
     public static List<Entity> getEntities(Location loc, double radius) {
         double sqareRadius = radius * radius;
         double x = loc.getX();
@@ -82,7 +79,7 @@ public class Utils {
         return not.world.getEntitiesWithinAABB(LivingEntity.class, buildBoxAround(not.getPosX(), not.getPosY(), not.getPosZ(), radius),
                 p -> p != not && p.getDistanceSq(not) <= sqareRadius);
     }
-    
+
     public static List<LivingEntity> getLiving(Location loc, double radius) {
         double sqareRadius = radius * radius;
         double x = loc.getX();
@@ -98,7 +95,7 @@ public class Utils {
                 .orElse(null);
     }
 
-    private static boolean doesIntersect(AxisAlignedBB bound, Vec3d start, Vec3d unit) {
+    private static boolean doesIntersect(AxisAlignedBB bound, Vector3d start, Vector3d unit) {
         double lowerX = Double.NEGATIVE_INFINITY;
         double upperX = Double.POSITIVE_INFINITY;
         if(unit.x != 0) {
@@ -138,14 +135,14 @@ public class Utils {
         return Math.max(Math.max(lowerX, lowerY), lowerZ) < Math.min(Math.min(upperX, upperY), upperZ);
     }
 
-    private static Vec3d getTargetVector(Entity ent, double range) {
+    private static Vector3d getTargetVector(Entity ent, double range) {
         if(range > 128) {
             range = 128;
         }
-        World w = ent.getEntityWorld().getWorld();
-        Vec3d start = ent.getEyePosition(1.0f);
-        Vec3d look = ent.getLookVec();
-        Vec3d end = start.add(look.x * range, look.y * range, look.z * range);
+        World w = ent.getEntityWorld();
+        Vector3d start = ent.getEyePosition(1.0f);
+        Vector3d look = ent.getLookVec();
+        Vector3d end = start.add(look.x * range, look.y * range, look.z * range);
 
         RayTraceResult ray = w.rayTraceBlocks(new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, ent));
         if(ray == null || ray.getHitVec() == null) {
@@ -156,10 +153,10 @@ public class Utils {
 
     @SuppressWarnings("unchecked")
     public static <T extends Entity> T getTargetedEntity(PlayerEntity p, double radius, Class<T> type) {
-        World w = p.getEntityWorld().getWorld();
-        Vec3d l = getTargetVector(p, radius);
-        Vec3d eye = p.getEyePosition(1.0f);
-        Vec3d unit = new Vec3d(l.x - eye.x, l.y - eye.y, l.z - eye.z);
+        World w = p.getEntityWorld();
+        Vector3d l = getTargetVector(p, radius);
+        Vector3d eye = p.getEyePosition(1.0f);
+        Vector3d unit = new Vector3d(l.x - eye.x, l.y - eye.y, l.z - eye.z);
 
         List<Entity> col = w.getEntitiesWithinAABBExcludingEntity(p, new AxisAlignedBB(eye.x, eye.y, eye.z, l.x, l.y, l.z));
         col.removeIf(ent -> !type.isAssignableFrom(ent.getClass()));
@@ -180,4 +177,12 @@ public class Utils {
                 .filter(pl -> pl.getName().getUnformattedComponentText().toLowerCase().contains(nameLower))
                 .findFirst().orElse(null);
     }
+
+    public static String getWorldName(World w) {
+        return w.getDimensionKey().getLocation().getPath();
+    }
+    
+    public static World getWorldFromName(MinecraftServer server, String name) {
+        return server.getWorld(RegistryKey.getOrCreateKey(Registry.WORLD_KEY, new ResourceLocation(name)));
+    }
 }

+ 0 - 48
src/main/java/me/km/world/ModBiomeProvider.java

@@ -1,48 +0,0 @@
-package me.km.world;
-
-import java.util.Set;
-import net.minecraft.util.registry.Registry;
-import net.minecraft.world.biome.Biome;
-import net.minecraft.world.biome.provider.BiomeProvider;
-import net.minecraft.world.biome.provider.OverworldBiomeProviderSettings;
-import net.minecraft.world.gen.layer.Layer;
-import net.minecraft.world.gen.layer.LayerUtil;
-
-public class ModBiomeProvider extends BiomeProvider {
-    private final Layer genBiomes;
-    private final Biome[] biomeArray;
-
-    public ModBiomeProvider(Set<Biome> biomes, OverworldBiomeProviderSettings settingsProvider) {
-        super(biomes);
-        biomeArray = biomes.toArray(new Biome[biomes.size()]);
-        this.genBiomes = LayerUtil.func_227474_a_(settingsProvider.getSeed(), settingsProvider.getWorldType(), settingsProvider.getGeneratorSettings());
-    }
-
-    @Override
-    public Biome getNoiseBiome(int x, int y, int z) {
-        Biome vanillaBiome = genBiomes.func_215738_a(x, z);
-
-        float min = Float.MAX_VALUE;
-        float min2 = Float.MAX_VALUE;
-        Biome minBiome = null;
-        Biome minBiome2 = null;
-        for(Biome b : biomeArray) {
-            float distance = Math.abs(b.getDepth() - vanillaBiome.getDepth());
-            if(distance < min) {
-                min2 = min;
-                minBiome2 = minBiome;
-
-                min = distance;
-                minBiome = b;
-            } else if(distance < min2) {
-                min2 = distance;
-                minBiome2 = b;
-            }
-        }
-
-        if((Registry.BIOME.getId(vanillaBiome) % 2) == 1) {
-            return minBiome;
-        }
-        return minBiome2;
-    }
-}

+ 0 - 14
src/main/java/me/km/world/ModDimensionFactory.java

@@ -1,14 +0,0 @@
-package me.km.world;
-
-import java.util.function.BiFunction;
-import net.minecraft.world.World;
-import net.minecraft.world.dimension.Dimension;
-import net.minecraft.world.dimension.DimensionType;
-import net.minecraftforge.common.ModDimension;
-
-public class ModDimensionFactory extends ModDimension {
-    @Override
-    public BiFunction<World, DimensionType, ? extends Dimension> getFactory() {
-        return (w, type) -> new ModOverworldDimension(w, type);
-    }
-}

+ 0 - 48
src/main/java/me/km/world/ModOverworldDimension.java

@@ -1,48 +0,0 @@
-package me.km.world;
-
-import me.km.utils.ReflectionUtils;
-import net.minecraft.world.World;
-import net.minecraft.world.biome.provider.BiomeProviderType;
-import net.minecraft.world.biome.provider.OverworldBiomeProviderSettings;
-import net.minecraft.world.dimension.DimensionType;
-import net.minecraft.world.dimension.OverworldDimension;
-import net.minecraft.world.gen.ChunkGenerator;
-import net.minecraft.world.gen.ChunkGeneratorType;
-import net.minecraft.world.gen.GenerationSettings;
-import net.minecraft.world.gen.OverworldChunkGenerator;
-import net.minecraft.world.gen.OverworldGenSettings;
-import org.apache.logging.log4j.LogManager;
-
-public class ModOverworldDimension extends OverworldDimension {
-    public ModOverworldDimension(World worldIn, DimensionType typeIn) {
-        super(worldIn, typeIn);
-    }
-
-    @Override
-    public ChunkGenerator<? extends GenerationSettings> createChunkGenerator() {
-        LogManager.getLogger().warn("Try swapping " + world + " " + world.getDimension().getType());
-        if(world.getDimension().getType().isVanilla()) {
-            LogManager.getLogger().warn("no swap in vanilla world");
-            return super.createChunkGenerator();
-        }
-
-        ModWorldInfo info = new ModWorldInfo(world.getWorldInfo(), WorldManager.getName(world), world.getServer());
-        ReflectionUtils.setWorldInfo(world, info);
-
-        ModWorldInfo.Type type = info.getType();
-        if(type != ModWorldInfo.Type.VOID && type != ModWorldInfo.Type.VANILLA) {
-            ChunkGeneratorType<OverworldGenSettings, OverworldChunkGenerator> chunkGenType = ChunkGeneratorType.SURFACE;
-            BiomeProviderType<OverworldBiomeProviderSettings, ModBiomeProvider> provider = info.getType().getProvider();
-            OverworldGenSettings genSettings = chunkGenType.createSettings();
-            OverworldBiomeProviderSettings providerSettings = provider.createSettings(this.world.getWorldInfo()).setGeneratorSettings(genSettings);
-            return chunkGenType.create(this.world, provider.create(providerSettings), genSettings);
-        }
-
-        return super.createChunkGenerator();
-    }
-
-    @Override
-    public boolean isDaytime() {
-        return getWorld().getSkylightSubtracted() < 4;
-    }
-}

+ 16 - 36
src/main/java/me/km/world/ModWorldGeneration.java

@@ -1,60 +1,40 @@
 package me.km.world;
 
-import java.util.Map;
+import java.util.function.Supplier;
 import me.km.blocks.ModBlocks;
-import me.km.utils.ReflectionUtils;
 import net.minecraft.block.Block;
 import net.minecraft.block.Blocks;
 import net.minecraft.world.biome.Biome;
-import net.minecraft.world.biome.NetherBiome;
 import net.minecraft.world.gen.GenerationStage;
 import net.minecraft.world.gen.feature.ConfiguredFeature;
-import net.minecraft.world.gen.feature.DecoratedFeatureConfig;
 import net.minecraft.world.gen.feature.Feature;
-import net.minecraft.world.gen.feature.IFeatureConfig;
-import net.minecraft.world.gen.feature.NoFeatureConfig;
 import net.minecraft.world.gen.feature.OreFeatureConfig;
-import net.minecraft.world.gen.feature.structure.StrongholdStructure;
-import net.minecraft.world.gen.feature.structure.Structure;
-import net.minecraft.world.gen.placement.CountRangeConfig;
-import net.minecraft.world.gen.placement.Placement;
 import net.minecraftforge.registries.ForgeRegistries;
 
 public class ModWorldGeneration {
     public static void register() {
         // search for all biomes which generate ore
-        StrongholdStructure patch = new StrongholdStructure(NoFeatureConfig::deserialize);
         for(Biome biome : ForgeRegistries.BIOMES.getValues()) {
-            if(!(biome instanceof NetherBiome)) {
-                biome.getCarvers(GenerationStage.Carving.AIR).clear();
-                biome.getCarvers(GenerationStage.Carving.LIQUID).clear();
-            }
-            Map<Structure<?>, IFeatureConfig> map = ReflectionUtils.getBiomeStructures(biome);
-            if(map.remove(Feature.STRONGHOLD) != null) {
-                System.out.println("removing stronghold from " + biome.getTranslationKey());
-            }
-            for(ConfiguredFeature f : biome.getFeatures(GenerationStage.Decoration.UNDERGROUND_ORES)) {
-                if(!(f.config instanceof DecoratedFeatureConfig)) {
-                    continue;
+            biome.getGenerationSettings().getFeatures().forEach(list -> {
+                for(Supplier<ConfiguredFeature<?, ?>> entry : list) {
+                    if(entry.get().config instanceof OreFeatureConfig) {
+                        OreFeatureConfig ore = (OreFeatureConfig) entry.get().config;
+                        if(ore.state == Blocks.IRON_ORE.getDefaultState()) {
+                            addFeatures(biome);
+                            break;
+                        }
+                    }
                 }
-                DecoratedFeatureConfig conf = (DecoratedFeatureConfig) f.config;
-                if(!(conf.feature.config instanceof OreFeatureConfig)) {
-                    continue;
-                }
-                OreFeatureConfig ore = (OreFeatureConfig) conf.feature.config;
-                if(ore.state == Blocks.IRON_ORE.getDefaultState()) {
-                    addFeatures(biome);
-                    break;
-                }
-            }
+            });
         }
     }
 
     private static void addOre(Biome b, Block ore, int maxCount, int spawnTries, int maxHeight) {
-        b.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES,
-                Feature.ORE.withConfiguration(new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE,
-                        ore.getDefaultState(), maxCount)
-                ).withPlacement(Placement.COUNT_RANGE.configure(new CountRangeConfig(spawnTries, 0, 0, maxHeight))));
+        b.getGenerationSettings().getFeatures().get(GenerationStage.Decoration.UNDERGROUND_ORES.ordinal()).add(() -> {
+            return Feature.ORE.withConfiguration(
+                    new OreFeatureConfig(OreFeatureConfig.FillerBlockType.BASE_STONE_OVERWORLD,
+                            ore.getDefaultState(), maxCount)).range(maxHeight).square().func_242731_b(spawnTries);
+        });
     }
 
     private static void addFeatures(Biome biome) {

+ 0 - 319
src/main/java/me/km/world/ModWorldInfo.java

@@ -1,319 +0,0 @@
-package me.km.world;
-
-import net.minecraft.world.Difficulty;
-import net.minecraft.world.storage.DerivedWorldInfo;
-import net.minecraft.world.storage.WorldInfo;
-import me.hammerle.snuviscript.config.SnuviConfig;
-import me.km.ObjectRegistry;
-import me.km.utils.ReflectionUtils;
-import net.minecraft.nbt.CompoundNBT;
-import net.minecraft.nbt.ListNBT;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.GameRules;
-import static net.minecraft.world.GameRules.*;
-import net.minecraft.world.WorldType;
-import net.minecraft.world.biome.provider.BiomeProviderType;
-import net.minecraft.world.biome.provider.OverworldBiomeProviderSettings;
-
-public class ModWorldInfo extends DerivedWorldInfo {
-    public static enum Type {
-        VANILLA, VOID, DESERT, SNOW;
-
-        public BiomeProviderType<OverworldBiomeProviderSettings, ModBiomeProvider> getProvider() {
-            switch(this) {
-                case DESERT:
-                    return ObjectRegistry.DESERT_BIOME_PROVIDER;
-                case SNOW:
-                    return ObjectRegistry.SNOW_BIOME_PROVIDER;
-            }
-            return null;
-        }
-    }
-
-    private final SnuviConfig config;
-
-    private long gameTime;
-    private long dayTime;
-    private int clearWeatherTime;
-    private boolean raining;
-    private int rainTime;
-    private boolean thundering;
-    private int thunderTime;
-    private Difficulty difficulty;
-    private final GameRules gameRules = new GameRules();
-    private int spawnX;
-    private int spawnY;
-    private int spawnZ;
-    private long seed = -1;
-
-    private Type type;
-
-    public ModWorldInfo(WorldInfo info, String name, MinecraftServer server) {
-        super(info);
-
-        config = new SnuviConfig("worlddata", name);
-        if(config.exists()) {
-            config.load(null);
-        }
-        onLoad(info, server);
-
-        org.apache.logging.log4j.LogManager.getLogger().warn("status: " + type);
-    }
-
-    private void onLoad(WorldInfo info, MinecraftServer server) {
-        String configSeed = config.getString(null, "seed", null);
-        if(configSeed != null) {
-            seed = configSeed.hashCode();
-        }
-        spawnX = config.getInt(null, "spawnX", info.getSpawnX());
-        spawnY = config.getInt(null, "spawnY", info.getSpawnY());
-        spawnZ = config.getInt(null, "spawnZ", info.getSpawnZ());
-        gameTime = config.getLong(null, "gameTime", info.getGameTime());
-        dayTime = config.getLong(null, "dayTime", info.getDayTime());
-        clearWeatherTime = config.getInt(null, "clearWeatherTime", info.getClearWeatherTime());
-        raining = config.getBoolean(null, "raining", info.isRaining());
-        rainTime = config.getInt(null, "rainTime", info.getRainTime());
-        thundering = config.getBoolean(null, "thundering", info.isThundering());
-        thunderTime = config.getInt(null, "thunderTime", info.getThunderTime());
-
-        String diffi = config.getString(null, "difficulty");
-        if(diffi == null) {
-            difficulty = info.getDifficulty();
-        } else {
-            try {
-                difficulty = Difficulty.valueOf(diffi);
-            } catch(Exception ex) {
-                difficulty = info.getDifficulty();
-            }
-        }
-
-        GameRules rules = info.getGameRulesInstance();
-        gameRules.get(DO_FIRE_TICK).set(config.getBoolean(null, "doFireTick", rules.getBoolean(DO_FIRE_TICK)), server);
-        gameRules.get(MOB_GRIEFING).set(config.getBoolean(null, "mobGriefing", rules.getBoolean(MOB_GRIEFING)), server);
-        gameRules.get(KEEP_INVENTORY).set(config.getBoolean(null, "keepInventory", rules.getBoolean(KEEP_INVENTORY)), server);
-        gameRules.get(DO_MOB_SPAWNING).set(config.getBoolean(null, "doMobSpawning", rules.getBoolean(DO_MOB_SPAWNING)), server);
-        gameRules.get(DO_MOB_LOOT).set(config.getBoolean(null, "doMobLoot", rules.getBoolean(DO_MOB_LOOT)), server);
-        gameRules.get(DO_TILE_DROPS).set(config.getBoolean(null, "doTileDrops", rules.getBoolean(DO_TILE_DROPS)), server);
-        gameRules.get(DO_ENTITY_DROPS).set(config.getBoolean(null, "doEntityDrops", rules.getBoolean(DO_ENTITY_DROPS)), server);
-        gameRules.get(COMMAND_BLOCK_OUTPUT).set(config.getBoolean(null, "commandBlockOutput", rules.getBoolean(COMMAND_BLOCK_OUTPUT)), server);
-        gameRules.get(NATURAL_REGENERATION).set(config.getBoolean(null, "naturalRegeneration", rules.getBoolean(NATURAL_REGENERATION)), server);
-        gameRules.get(DO_DAYLIGHT_CYCLE).set(config.getBoolean(null, "doDaylightCycle", rules.getBoolean(DO_DAYLIGHT_CYCLE)), server);
-        gameRules.get(LOG_ADMIN_COMMANDS).set(config.getBoolean(null, "logAdminCommands", rules.getBoolean(LOG_ADMIN_COMMANDS)), server);
-        gameRules.get(SHOW_DEATH_MESSAGES).set(config.getBoolean(null, "showDeathMessages", rules.getBoolean(SHOW_DEATH_MESSAGES)), server);
-        ReflectionUtils.setIntegerValue(gameRules.get(RANDOM_TICK_SPEED), config.getInt(null, "randomTickSpeed", rules.getInt(RANDOM_TICK_SPEED)));
-        gameRules.get(SEND_COMMAND_FEEDBACK).set(config.getBoolean(null, "sendCommandFeedback", rules.getBoolean(SEND_COMMAND_FEEDBACK)), server);
-        gameRules.get(REDUCED_DEBUG_INFO).set(config.getBoolean(null, "reducedDebugInfo", rules.getBoolean(REDUCED_DEBUG_INFO)), server);
-        gameRules.get(SPECTATORS_GENERATE_CHUNKS).set(config.getBoolean(null, "spectatorsGenerateChunks", rules.getBoolean(SPECTATORS_GENERATE_CHUNKS)), server);
-        ReflectionUtils.setIntegerValue(gameRules.get(SPAWN_RADIUS), config.getInt(null, "spawnRadius", rules.getInt(SPAWN_RADIUS)));
-        gameRules.get(DISABLE_ELYTRA_MOVEMENT_CHECK).set(config.getBoolean(null, "disableElytraMovementCheck", rules.getBoolean(DISABLE_ELYTRA_MOVEMENT_CHECK)), server);
-        ReflectionUtils.setIntegerValue(gameRules.get(MAX_ENTITY_CRAMMING), config.getInt(null, "maxEntityCramming", rules.getInt(MAX_ENTITY_CRAMMING)));
-        gameRules.get(DO_WEATHER_CYCLE).set(config.getBoolean(null, "doWeatherCycle", rules.getBoolean(DO_WEATHER_CYCLE)), server);
-        gameRules.get(DO_LIMITED_CRAFTING).set(config.getBoolean(null, "doLimitedCrafting", rules.getBoolean(DO_LIMITED_CRAFTING)), server);
-        ReflectionUtils.setIntegerValue(gameRules.get(MAX_COMMAND_CHAIN_LENGTH), config.getInt(null, "maxCommandChainLength", rules.getInt(MAX_COMMAND_CHAIN_LENGTH)));
-        gameRules.get(ANNOUNCE_ADVANCEMENTS).set(config.getBoolean(null, "announceAdvancements", rules.getBoolean(ANNOUNCE_ADVANCEMENTS)), server);
-        gameRules.get(DISABLE_RAIDS).set(config.getBoolean(null, "disableRaids", rules.getBoolean(DISABLE_RAIDS)), server);
-        gameRules.get(DO_INSOMNIA).set(config.getBoolean(null, "doInsomnia", rules.getBoolean(DO_INSOMNIA)), server);
-        gameRules.get(DO_IMMEDIATE_RESPAWN).set(config.getBoolean(null, "doImmediateRespawn", rules.getBoolean(DO_IMMEDIATE_RESPAWN)), server);
-
-        try {
-            type = Type.valueOf(config.getString(null, "type", ""));
-        } catch(IllegalArgumentException ex) {
-            type = Type.VOID;
-        }
-    }
-
-    public void onSave() {
-        config.set("spawnX", spawnX);
-        config.set("spawnY", spawnY);
-        config.set("spawnZ", spawnZ);
-        config.set("gameTime", gameTime);
-        config.set("dayTime", dayTime);
-        config.set("clearWeatherTime", clearWeatherTime);
-        config.set("raining", raining);
-        config.set("rainTime", rainTime);
-        config.set("thundering", thundering);
-        config.set("thunderTime", thunderTime);
-        config.set("difficulty", difficulty);
-
-        config.set("doFireTick", gameRules.getBoolean(DO_FIRE_TICK));
-        config.set("mobGriefing", gameRules.getBoolean(MOB_GRIEFING));
-        config.set("keepInventory", gameRules.getBoolean(KEEP_INVENTORY));
-        config.set("doMobSpawning", gameRules.getBoolean(DO_MOB_SPAWNING));
-        config.set("doMobLoot", gameRules.getBoolean(DO_MOB_LOOT));
-        config.set("doTileDrops", gameRules.getBoolean(DO_TILE_DROPS));
-        config.set("doEntityDrops", gameRules.getBoolean(DO_ENTITY_DROPS));
-        config.set("commandBlockOutput", gameRules.getBoolean(COMMAND_BLOCK_OUTPUT));
-        config.set("naturalRegeneration", gameRules.getBoolean(NATURAL_REGENERATION));
-        config.set("doDaylightCycle", gameRules.getBoolean(DO_DAYLIGHT_CYCLE));
-        config.set("logAdminCommands", gameRules.getBoolean(LOG_ADMIN_COMMANDS));
-        config.set("showDeathMessages", gameRules.getBoolean(SHOW_DEATH_MESSAGES));
-        config.set("randomTickSpeed", gameRules.getInt(RANDOM_TICK_SPEED));
-        config.set("sendCommandFeedback", gameRules.getBoolean(SEND_COMMAND_FEEDBACK));
-        config.set("reducedDebugInfo", gameRules.getBoolean(REDUCED_DEBUG_INFO));
-        config.set("spectatorsGenerateChunks", gameRules.getBoolean(SPECTATORS_GENERATE_CHUNKS));
-        config.set("spawnRadius", gameRules.getInt(SPAWN_RADIUS));
-        config.set("disableElytraMovementCheck", gameRules.getBoolean(DISABLE_ELYTRA_MOVEMENT_CHECK));
-        config.set("maxEntityCramming", gameRules.getInt(MAX_ENTITY_CRAMMING));
-        config.set("doWeatherCycle", gameRules.getBoolean(DO_WEATHER_CYCLE));
-        config.set("doLimitedCrafting", gameRules.getBoolean(DO_LIMITED_CRAFTING));
-        config.set("maxCommandChainLength", gameRules.getInt(MAX_COMMAND_CHAIN_LENGTH));
-        config.set("announceAdvancements", gameRules.getBoolean(ANNOUNCE_ADVANCEMENTS));
-        config.set("disableRaids", gameRules.getBoolean(DISABLE_RAIDS));
-        config.set("doInsomnia", gameRules.getBoolean(DO_INSOMNIA));
-        config.set("doImmediateRespawn", gameRules.getBoolean(DO_IMMEDIATE_RESPAWN));
-
-        config.set("type", type);
-
-        config.save(null);
-    }
-
-    @Override
-    public long getGameTime() {
-        return this.gameTime;
-    }
-
-    @Override
-    public long getDayTime() {
-        return this.dayTime;
-    }
-
-    @Override
-    public void setGameTime(long time) {
-        this.gameTime = time;
-    }
-
-    @Override
-    public void setDayTime(long time) {
-        this.dayTime = time;
-    }
-
-    @Override
-    public int getClearWeatherTime() {
-        return this.clearWeatherTime;
-    }
-
-    @Override
-    public void setClearWeatherTime(int cleanWeatherTimeIn) {
-        this.clearWeatherTime = cleanWeatherTimeIn;
-    }
-
-    @Override
-    public boolean isThundering() {
-        return this.thundering;
-    }
-
-    @Override
-    public void setThundering(boolean thunderingIn) {
-        this.thundering = thunderingIn;
-    }
-
-    @Override
-    public int getThunderTime() {
-        return this.thunderTime;
-    }
-
-    @Override
-    public void setThunderTime(int time) {
-        this.thunderTime = time;
-    }
-
-    @Override
-    public boolean isRaining() {
-        return this.raining;
-    }
-
-    @Override
-    public void setRaining(boolean isRaining) {
-        this.raining = isRaining;
-    }
-
-    @Override
-    public int getRainTime() {
-        return this.rainTime;
-    }
-
-    @Override
-    public void setRainTime(int time) {
-        this.rainTime = time;
-    }
-
-    @Override
-    public Difficulty getDifficulty() {
-        return this.difficulty;
-    }
-
-    @Override
-    public void setDifficulty(Difficulty newDifficulty) {
-        this.difficulty = newDifficulty;
-    }
-
-    @Override
-    public GameRules getGameRulesInstance() {
-        return gameRules;
-    }
-
-    @Override
-    public WorldType getGenerator() {
-        if(type == Type.VOID) {
-            return WorldType.FLAT;
-        }
-        return super.getGenerator();
-    }
-
-    public Type getType() {
-        return type;
-    }
-
-    @Override
-    public CompoundNBT getGeneratorOptions() {
-        if(type == Type.VOID) {
-            CompoundNBT base = new CompoundNBT();
-
-            base.putString("biome", "minecraft:the_void");
-
-            ListNBT list = new ListNBT();
-
-            base.put("layers", list);
-
-            CompoundNBT layer = new CompoundNBT();
-            layer.putString("block", "minecraft:air");
-            layer.putByte("height", (byte) 1);
-
-            list.add(layer);
-
-            return base;
-        }
-        return super.getGeneratorOptions();
-    }
-
-    @Override
-    public void setSpawn(BlockPos spawnPoint) {
-        spawnX = spawnPoint.getX();
-        spawnY = spawnPoint.getY();
-        spawnZ = spawnPoint.getZ();
-    }
-
-    @Override
-    public int getSpawnX() {
-        return spawnX;
-    }
-
-    @Override
-    public int getSpawnY() {
-        return spawnY;
-    }
-
-    @Override
-    public int getSpawnZ() {
-        return spawnZ;
-    }
-
-    @Override
-    public long getSeed() {
-        if(seed != -1) {
-            return seed;
-        }
-        return super.getSeed();
-    }
-}

+ 0 - 23
src/main/java/me/km/world/WorldEvents.java

@@ -1,23 +0,0 @@
-package me.km.world;
-
-import net.minecraft.world.World;
-import net.minecraft.world.storage.WorldInfo;
-import net.minecraftforge.common.DimensionManager;
-import net.minecraftforge.event.world.WorldEvent;
-import net.minecraftforge.eventbus.api.SubscribeEvent;
-
-public class WorldEvents {
-    @SubscribeEvent
-    public void onWorldLoad(WorldEvent.Load e) {
-        World w = e.getWorld().getWorld();
-        DimensionManager.keepLoaded(w.getDimension().getType(), true);
-    }
-
-    @SubscribeEvent
-    public void onWorldUnload(WorldEvent.Unload e) {
-        WorldInfo info = e.getWorld().getWorld().getWorldInfo();
-        if(info instanceof ModWorldInfo) {
-            ((ModWorldInfo) info).onSave();
-        }
-    }
-}

+ 0 - 123
src/main/java/me/km/world/WorldManager.java

@@ -1,123 +0,0 @@
-package me.km.world;
-
-import java.util.ArrayList;
-import me.km.KajetansMod;
-import me.km.utils.ReflectionUtils;
-import net.minecraft.server.MinecraftServer;
-import net.minecraft.util.ResourceLocation;
-import net.minecraft.world.IWorld;
-import net.minecraft.world.dimension.DimensionType;
-import net.minecraft.world.server.ServerWorld;
-import net.minecraftforge.common.DimensionManager;
-import net.minecraftforge.common.ModDimension;
-import net.minecraftforge.registries.ClearableRegistry;
-
-public class WorldManager {
-    public static final ModDimension MOD_DIMENSION = new ModDimensionFactory().setRegistryName(KajetansMod.MODID, "mod_dimension");
-
-    // -------------------------------------------------------------------------
-    // unsafe stuff
-    // -------------------------------------------------------------------------
-    private static ResourceLocation getRegistry(DimensionType type) {
-        ResourceLocation rl = type.getRegistryName();
-        if(rl != null) {
-            return rl;
-        }
-        rl = DimensionManager.getRegistry().getKey(type);
-        if(rl == null) {
-            return null;
-        }
-        type.setRegistryName(rl);
-        return rl;
-    }
-
-    private static DimensionType getDimensionType(ResourceLocation rl) {
-        return DimensionManager.getRegistry().getOrDefault(rl);
-    }
-
-    private static ServerWorld getWorld(MinecraftServer server, DimensionType type, boolean force) {
-        return DimensionManager.getWorld(server, type, force, force);
-    }
-
-    private static boolean containsRegistry(ResourceLocation rl) {
-        return DimensionManager.getRegistry().getOrDefault(rl) != null;
-    }
-
-    private static void unregister(ResourceLocation rl, DimensionType removeType) {
-        // unregister the id
-        try {
-            // data might not be set
-            DimensionManager.unregisterDimension(removeType.getId() + 1);
-        } catch(Exception ex) {
-        }
-        // remove entry in "savedEntries"
-        ReflectionUtils.removeDimensionSaveEntry(rl);
-        // remove the registry
-        ClearableRegistry<DimensionType> reg = (ClearableRegistry<DimensionType>) DimensionManager.getRegistry();
-        ArrayList<ResourceLocation> regs = new ArrayList<>();
-        ArrayList<DimensionType> types = new ArrayList<>();
-        for(DimensionType type : reg) {
-            if(type == removeType) {
-                continue;
-            }
-            types.add(type);
-            regs.add(reg.getKey(type));
-        }
-        reg.clear();
-        for(int i = 0; i < regs.size(); i++) {
-            DimensionType type = types.get(i);
-            reg.register(type.getId() + 1, regs.get(i), type);
-        }
-    }
-
-    // -------------------------------------------------------------------------
-    // normal stuff
-    // -------------------------------------------------------------------------
-    public static String getName(IWorld ws) {
-        if(ws == null) {
-            return "null";
-        }
-        DimensionType type = ws.getDimension().getType();
-        ResourceLocation rl = getRegistry(type);
-        return rl == null ? "null" : rl.getPath();
-    }
-
-    public static ServerWorld get(MinecraftServer server, String name) {
-        String domain;
-        if(name.equals("overworld") || name.equals("the_nether") || name.equals("the_end")) {
-            domain = "minecraft";
-        } else {
-            domain = KajetansMod.MODID;
-        }
-        ResourceLocation rl = new ResourceLocation(domain, name);
-        DimensionType type = getDimensionType(rl);
-        if(type == null) {
-            return null;
-        }
-        return getWorld(server, type, true);
-    }
-
-    public static boolean register(String name) {
-        ResourceLocation rl = new ResourceLocation(KajetansMod.MODID, name);
-        if(containsRegistry(rl)) {
-            return false;
-        }
-        DimensionType dt = DimensionManager.registerDimension(rl, MOD_DIMENSION, null, true);
-        DimensionManager.keepLoaded(dt, true);
-        return true;
-    }
-
-    public static boolean unregister(MinecraftServer server, String name) {
-        ResourceLocation rl = new ResourceLocation(KajetansMod.MODID, name);
-        DimensionType removeType = getDimensionType(rl);
-        if(removeType == null) {
-            return false;
-        }
-        ServerWorld ws = getWorld(server, removeType, true);
-        if(ws != null) {
-            return false;
-        }
-        unregister(rl, removeType);
-        return true;
-    }
-}

+ 3 - 2
src/main/resources/META-INF/mods.toml

@@ -1,8 +1,9 @@
 modLoader="javafml"
-loaderVersion="[31,)"
+loaderVersion="[35,)"
 [[mods]]
 modId="km"
-version="0.0.46"
+version="0.0.47"
+license="All rights reserved"
 displayName="Kajetans Mod"
 credits="kajetanjohannes"
 authors="kajetanjohannes"

+ 0 - 5
src/main/resources/assets/km/lang/en_us.json

@@ -150,8 +150,6 @@
     "item.km.hay_bundle": "Hay Bundle", 
     "item.km.bat_wing": "Bat Wing", 
     "item.km.wolf_fur": "Wolf Fur", 
-    "item.km.bear_brown_fur": "Brown Bear Fur", 
-    "item.km.bear_black_fur": "Black Bear Fur", 
     "item.km.bear_polar_fur": "Polar Bear Fur", 
     "item.km.cloth": "Cloth", 
     "item.km.coarse_cloth": "Coarse Cloth", 
@@ -262,9 +260,6 @@
     "item.km.skill56": "Skill 56",
     "item.km.skill57": "Skill 57",
 
-    "entity.brown_bear": "Brown Bear", 
-    "entity.black_bear": "Black Bear", 
-
     "key.km.function": "Kajetans Mod ", 
     "key.function.1": "Function Key 1", 
     "key.function.2": "Function Key 2", 

+ 0 - 6
src/main/resources/assets/km/models/item/bear_black_fur.json

@@ -1,6 +0,0 @@
-{
-    "parent": "item/generated",
-    "textures": {
-        "layer0": "km:item/fur/bear_black_fur"
-    }
-}

+ 0 - 6
src/main/resources/assets/km/models/item/bear_brown_fur.json

@@ -1,6 +0,0 @@
-{
-    "parent": "item/generated",
-    "textures": {
-        "layer0": "km:item/fur/bear_brown_fur"
-    }
-}

BIN
src/main/resources/assets/km/textures/entity/bear/blackbear.png


BIN
src/main/resources/assets/km/textures/entity/bear/brownbear.png


BIN
src/main/resources/assets/km/textures/item/fur/bear_black_fur.png


BIN
src/main/resources/assets/km/textures/item/fur/bear_brown_fur.png


+ 2 - 2
src/main/resources/pack.mcmeta

@@ -1,7 +1,7 @@
 {
     "pack": {
         "description": "km resources",
-        "pack_format": 5,
-        "_comment": "A pack_format of 5 requires json lang files and some texture changes from 1.15. Note: we require v5 pack meta for all mods."
+        "pack_format": 6,
+        "_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods."
     }
 }