Browse Source

initial update to 1.15.2

Kajetan Johannes Hammerle 4 years ago
parent
commit
2d79708907
48 changed files with 586 additions and 598 deletions
  1. 3 7
      build.gradle
  2. 62 20
      src/main/java/me/km/Client.java
  3. 1 1
      src/main/java/me/km/Server.java
  4. 1 2
      src/main/java/me/km/blockprotections/BlockProtectionEvents.java
  5. 23 30
      src/main/java/me/km/blocks/BlockGravelSlab.java
  6. 1 1
      src/main/java/me/km/blocks/BlockHay.java
  7. 1 8
      src/main/java/me/km/blocks/BlockLantern.java
  8. 3 16
      src/main/java/me/km/blocks/BlockSpikes.java
  9. 4 2
      src/main/java/me/km/blocks/ModBlocks.java
  10. 19 12
      src/main/java/me/km/blocks/ModTree.java
  11. 59 46
      src/main/java/me/km/blocks/cookingpot/BlockCookingPot.java
  12. 2 8
      src/main/java/me/km/blocks/cookingpot/CookingPotColorMixer.java
  13. 9 4
      src/main/java/me/km/blocks/cookingpot/TileEntityCookingPot.java
  14. 10 3
      src/main/java/me/km/entities/EntityHuman.java
  15. 7 9
      src/main/java/me/km/entities/EntityItemProjectile.java
  16. 73 4
      src/main/java/me/km/entities/HumanSkinLoader.java
  17. 4 4
      src/main/java/me/km/entities/ModEntities.java
  18. 0 27
      src/main/java/me/km/entities/ModelHuman.java
  19. 5 5
      src/main/java/me/km/entities/RenderBlackBear.java
  20. 5 5
      src/main/java/me/km/entities/RenderBrownBear.java
  21. 100 30
      src/main/java/me/km/entities/RenderHuman.java
  22. 1 1
      src/main/java/me/km/entities/RenderNobody.java
  23. 4 1
      src/main/java/me/km/events/PlayerMoveData.java
  24. 2 2
      src/main/java/me/km/items/ItemColoredSoup.java
  25. 1 1
      src/main/java/me/km/items/ItemSling.java
  26. 3 3
      src/main/java/me/km/items/ModArmorMaterial.java
  27. 3 3
      src/main/java/me/km/items/ModItemTier.java
  28. 20 22
      src/main/java/me/km/items/ModelCylinder.java
  29. 19 21
      src/main/java/me/km/items/ModelHat.java
  30. 2 2
      src/main/java/me/km/networking/CustomInventoryScreen.java
  31. 0 81
      src/main/java/me/km/networking/DimensionSync.java
  32. 5 5
      src/main/java/me/km/networking/ItemStackDisplayGui.java
  33. 0 11
      src/main/java/me/km/networking/ModPacketHandler.java
  34. 4 4
      src/main/java/me/km/networking/PlayerDisplayGui.java
  35. 2 2
      src/main/java/me/km/networking/PlayerHeadGui.java
  36. 2 2
      src/main/java/me/km/networking/StatusDisplayGui.java
  37. 38 34
      src/main/java/me/km/overrides/ModCapeLayer.java
  38. 5 5
      src/main/java/me/km/overrides/ModFluidBlockRenderer.java
  39. 52 82
      src/main/java/me/km/overrides/ModPlayerList.java
  40. 5 21
      src/main/java/me/km/snuviscript/MinecraftFunctions.java
  41. 2 3
      src/main/java/me/km/utils/ClientReflectionUtils.java
  42. 4 4
      src/main/java/me/km/utils/ItemStackUtils.java
  43. 1 1
      src/main/java/me/km/utils/Location.java
  44. 2 2
      src/main/java/me/km/utils/Utils.java
  45. 12 12
      src/main/java/me/km/world/ModWorldGeneration.java
  46. 1 25
      src/main/java/me/km/world/WorldManager.java
  47. 2 2
      src/main/resources/META-INF/mods.toml
  48. 2 2
      src/main/resources/pack.mcmeta

+ 3 - 7
build.gradle

@@ -10,24 +10,20 @@ buildscript {
 }
 apply plugin: 'net.minecraftforge.gradle'
 // Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
-//apply plugin: 'eclipse'
-//apply plugin: 'maven-publish'
 
 version = '1.0'
 group = 'me.hammerle.km'
 archivesBaseName = 'km'
 
-//sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
-
 minecraft {
-    mappings channel: 'snapshot', version: '20190719-1.14.3'
+    mappings channel: 'snapshot', version: '20200214-1.15.1'
 
     runs {
         client {
             workingDirectory project.file('run')
             property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
             property 'forge.logging.console.level', 'info'
-            args '--username', 'kajetanjohanne'
+            args '--username', 'kajetanjohannes'
         }
 
         server {
@@ -39,7 +35,7 @@ minecraft {
 }
 
 dependencies {
-    minecraft 'net.minecraftforge:forge:1.14.4-28.1.90'
+    minecraft 'net.minecraftforge:forge:1.15.2-31.1.0'
     
     compile 'mysql:mysql-connector-java:5.1.42'
     

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

@@ -1,6 +1,6 @@
 package me.km;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.matrix.MatrixStack;
 import java.awt.Color;
 import java.util.List;
 import me.km.blocks.ModBlocks;
@@ -18,14 +18,21 @@ import me.km.networking.PlayerHeadGui;
 import me.km.networking.StatusDisplayGui;
 import me.km.utils.ClientReflectionUtils;
 import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
 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;
-import net.minecraft.client.renderer.entity.LivingRenderer;
-import net.minecraft.entity.LivingEntity;
+import net.minecraft.client.renderer.entity.EntityRenderer;
+import net.minecraft.client.renderer.entity.EntityRendererManager;
+import net.minecraft.entity.Entity;
 import net.minecraft.item.Item;
 import net.minecraft.item.ArmorItem;
 import net.minecraft.item.BlockItem;
@@ -34,19 +41,20 @@ import net.minecraft.nbt.CompoundNBT;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.util.text.TextFormatting;
-import net.minecraft.util.text.translation.LanguageMap;
+import net.minecraft.util.text.LanguageMap;
 import net.minecraft.world.GrassColors;
 import net.minecraft.world.biome.BiomeColors;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 import net.minecraftforge.client.event.GuiScreenEvent;
 import net.minecraftforge.client.event.RenderGameOverlayEvent;
-import net.minecraftforge.client.event.RenderLivingEvent;
+import net.minecraftforge.client.event.RenderNameplateEvent;
 import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.event.entity.player.ItemTooltipEvent;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.event.TickEvent;
 import net.minecraftforge.event.entity.player.PlayerInteractEvent;
+import net.minecraftforge.eventbus.api.Event;
 
 @OnlyIn(Dist.CLIENT)
 public class Client 
@@ -67,6 +75,17 @@ public class Client
     
     private static void registerColors()
     {
+        RenderTypeLookup.setRenderLayer(ModBlocks.lantern, RenderType.getTranslucent());
+        RenderTypeLookup.setRenderLayer(ModBlocks.tallGrass, RenderType.getCutout());
+        RenderTypeLookup.setRenderLayer(ModBlocks.cherrySapling, RenderType.getCutout());
+        RenderTypeLookup.setRenderLayer(ModBlocks.apricotSapling, RenderType.getCutout());
+        RenderTypeLookup.setRenderLayer(ModBlocks.pearSapling, RenderType.getCutout());
+        RenderTypeLookup.setRenderLayer(ModBlocks.plumSapling, RenderType.getCutout());
+        RenderTypeLookup.setRenderLayer(ModBlocks.cherryLeaves, RenderType.getCutoutMipped());
+        RenderTypeLookup.setRenderLayer(ModBlocks.apricotLeaves, RenderType.getCutoutMipped());
+        RenderTypeLookup.setRenderLayer(ModBlocks.pearLeaves, RenderType.getCutoutMipped());
+        RenderTypeLookup.setRenderLayer(ModBlocks.plumLeaves, RenderType.getCutoutMipped());
+        
         BlockColors bColors = Minecraft.getInstance().getBlockColors();
         bColors.register((state, w, pos, tintIndex) -> 
         {
@@ -113,32 +132,55 @@ public class Client
     }
     
     @SubscribeEvent
-    public void onClientTick(RenderLivingEvent.Specials.Pre e)
+    public void onRenderNamePlate(RenderNameplateEvent e)
     {
-        e.setCanceled(true);
+        e.setResult(Event.Result.DENY);
+        
+        Entity ent = e.getEntity();
+        EntityRendererManager erm = Minecraft.getInstance().getRenderManager();
+        EntityRenderer renderer = erm.getRenderer(ent);
         
-        LivingRenderer lr = e.getRenderer();
-        LivingEntity liv = e.getEntity();
-        if(ClientReflectionUtils.canRenderName(lr, liv)) 
+        if(ClientReflectionUtils.canRenderName(renderer, ent)) 
         {
-            double distance = liv.getDistanceSq(lr.getRenderManager().info.getProjectedView());
-            float f = liv.shouldRenderSneaking() ? 32.0F : 64.0F;
-            if (!(distance >= (double)(f * f))) 
+            double d0 = erm.squareDistanceTo(ent);
+            if(!(d0 > 4096.0D))
             {
-                ITextComponent text = liv.getCustomName();
+                boolean flag = !ent.isDiscrete();
+                MatrixStack mStack = e.getMatrixStack();
+                mStack.push();
+                mStack.translate(0.0, ent.getHeight() + 0.5F, 0.0);
+                mStack.rotate(erm.getCameraOrientation());
+                mStack.scale(-0.025f, -0.025f, 0.025f);
+                
+                Matrix4f matrix4f = mStack.getLast().getMatrix();
+                float f1 = Minecraft.getInstance().gameSettings.getTextBackgroundOpacity(0.25F);
+                int j = (int) (f1 * 255.0F) << 24;
+                
+                FontRenderer fontrenderer = erm.getFontRenderer();
+                
+                ITextComponent text = ent.getCustomName();
                 if(text == null)
                 {
-                    text = liv.getDisplayName();
+                    text = ent.getDisplayName();
                 }
                 String s = text.getFormattedText();
                 String[] parts = s.split("\n");
-                GlStateManager.alphaFunc(516, 0.1F);
-                double y = e.getY();
-                for(String p : parts)
+                
+                IRenderTypeBuffer buffer = e.getRenderTypeBuffer();
+                
+                Vector3f up = new Vector3f(0.0f, 9.0f * 1.15f * 0.025f, 0.0f);
+                for(String line : parts)
                 {
-                    ClientReflectionUtils.renderEntityName(lr, liv, e.getX(), y, e.getZ(), p, distance);
-                    y += 9.0 * 1.15 * 0.025;
+                    float f2 = -0.5f * fontrenderer.getStringWidth(line);
+                    fontrenderer.renderString(line, f2, 0.0f, 553648127, false, matrix4f, buffer, flag, j, 0xF00000);
+                    if(flag)
+                    {
+                        fontrenderer.renderString(line, f2, 0.0f, -1, false, matrix4f, buffer, false, 0, 0xF00000);
+                    }
+                    matrix4f.translate(up);
                 }
+
+                mStack.pop();
             }
         }
     }

+ 1 - 1
src/main/java/me/km/Server.java

@@ -76,7 +76,7 @@ public class Server
         // mod player list hook
         Hooks.setPlayerListFunction(ds -> 
         {
-            ds.setPlayerList(new ModPlayerList(ds, scheduler));
+            ds.setPlayerList(new ModPlayerList(ds));
         });
         
         // scripts

+ 1 - 2
src/main/java/me/km/blockprotections/BlockProtectionEvents.java

@@ -3,7 +3,6 @@ package me.km.blockprotections;
 import me.km.overrides.ModEntityPlayerMP;
 import me.km.permissions.PermissionManager;
 import me.km.utils.Location;
-import me.km.utils.Utils;
 import net.minecraft.block.Block;
 import net.minecraft.block.ContainerBlock;
 import net.minecraft.block.DoorBlock;
@@ -114,7 +113,7 @@ public class BlockProtectionEvents
             return;
         }
         BlockState state = e.getWorld().getBlockState(e.getPos());
-        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getEntityPlayer();
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getPlayer();
         BlockPos pos = e.getPos();
         if(BlockTags.DOORS.contains(state.getBlock()) && state.get(DoorBlock.HALF) == DoubleBlockHalf.UPPER)
         {

+ 23 - 30
src/main/java/me/km/blocks/BlockGravelSlab.java

@@ -3,7 +3,7 @@ package me.km.blocks;
 import java.util.Random;
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
-import net.minecraft.block.FallingBlock;
+import net.minecraft.block.Blocks;
 import net.minecraft.block.SlabBlock;
 import net.minecraft.block.material.Material;
 import net.minecraft.entity.item.FallingBlockEntity;
@@ -15,6 +15,7 @@ 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;
 import net.minecraftforge.api.distmarker.OnlyIn;
 import net.minecraftforge.common.ToolType;
@@ -33,11 +34,11 @@ public class BlockGravelSlab extends SlabBlock
     }
 
     @Override
-    public void onBlockAdded(BlockState p_220082_1_, World w, BlockPos pos, BlockState p_220082_4_, boolean p_220082_5_)
+    public void onBlockAdded(BlockState state, World w, BlockPos pos, BlockState oldState, boolean isMoving)
     {
         w.getPendingBlockTicks().scheduleTick(pos, this, this.tickRate(w));
     }
-
+    
     @Override
     public BlockState updatePostPlacement(BlockState state, Direction facing, BlockState facingState, IWorld w, BlockPos currentPos, BlockPos facingPos)
     {
@@ -46,45 +47,37 @@ public class BlockGravelSlab extends SlabBlock
     }
 
     @Override
-    public void tick(BlockState state, World w, BlockPos pos, Random random)
-    {
-        if(!w.isRemote)
-        {
-            this.checkFallable(w, pos);
-        }
-    }
-
-    private void checkFallable(World w, BlockPos pos)
+    public void tick(BlockState state, ServerWorld w, BlockPos pos, Random r)
     {
-        BlockState state = w.getBlockState(pos);
-        if((w.isAirBlock(pos.down()) || FallingBlock.canFallThrough(w.getBlockState(pos.down()))) && pos.getY() >= 0)
+        if(w.isAirBlock(pos.down()) || canFallThrough(w.getBlockState(pos.down())) && pos.getY() >= 0)
         {
-            if(!w.isRemote)
+            BlockState fallState;
+            if(state == getDefaultState().with(TYPE, SlabType.TOP))    
             {
-                FallingBlockEntity fbe = new FallingBlockEntity(w, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, state);
-                w.addEntity(fbe);
+                fallState = w.getBlockState(pos).with(TYPE, SlabType.BOTTOM);
             }
-
-        }
-        else if(state == getDefaultState().with(TYPE, SlabType.TOP) && pos.getY() >= 0)
-        {
-            if(!w.isRemote)
+            else
             {
-                FallingBlockEntity fbe = new FallingBlockEntity(w, 
-                        pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, 
-                        w.getBlockState(pos).with(TYPE, SlabType.BOTTOM));
-                w.addEntity(fbe);
+                fallState = w.getBlockState(pos);
             }
-
+            FallingBlockEntity fallingblockentity = new FallingBlockEntity(w, pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5, fallState);
+            w.addEntity(fallingblockentity);
         }
     }
-    
+
     @Override
     public int tickRate(IWorldReader w)
     {
         return 2;
     }
 
+    public static boolean canFallThrough(BlockState state)
+    {
+        Block block = state.getBlock();
+        Material material = state.getMaterial();
+        return state.isAir() || block == Blocks.FIRE || material.isLiquid() || material.isReplaceable();
+    }
+
     @OnlyIn(Dist.CLIENT)
     @Override
     public void animateTick(BlockState state, World w, BlockPos pos, Random rand)
@@ -92,7 +85,7 @@ public class BlockGravelSlab extends SlabBlock
         if(rand.nextInt(16) == 0)
         {
             BlockPos blockpos = pos.down();
-            if(w.isAirBlock(blockpos) || FallingBlock.canFallThrough(w.getBlockState(blockpos)))
+            if(w.isAirBlock(blockpos) || canFallThrough(w.getBlockState(blockpos)))
             {
                 double x = pos.getX() + rand.nextFloat();
                 double y = pos.getY() - 0.05;
@@ -108,4 +101,4 @@ public class BlockGravelSlab extends SlabBlock
     {
         return -8356741;
     }
-}
+}

+ 1 - 1
src/main/java/me/km/blocks/BlockHay.java

@@ -20,6 +20,6 @@ public class BlockHay extends RotatedPillarBlock
     @Override
     public void onFallenUpon(World w, BlockPos pos, Entity ent, float fallDistance)
     {
-        ent.fall(fallDistance, 0.2f);
+        ent.onLivingFall(fallDistance, 0.2f);
     }
 }

+ 1 - 8
src/main/java/me/km/blocks/BlockLantern.java

@@ -10,7 +10,6 @@ import net.minecraft.block.material.Material;
 import net.minecraft.item.BlockItemUseContext;
 import net.minecraft.particles.ParticleTypes;
 import net.minecraft.state.StateContainer;
-import net.minecraft.util.BlockRenderLayer;
 import net.minecraft.util.Direction;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.shapes.ISelectionContext;
@@ -108,7 +107,7 @@ public class BlockLantern extends DirectionalBlock
         Direction direction = state.get(FACING);
         if(direction == Direction.UP)
         {
-            return func_220055_a(w, pos.down(), Direction.UP);
+            return hasEnoughSolidSide(w, pos.down(), Direction.UP);
         }
         BlockPos blockpos = pos.offset(direction.getOpposite());
         BlockState blockstate = w.getBlockState(blockpos);
@@ -126,10 +125,4 @@ public class BlockLantern extends DirectionalBlock
     {
         return state.get(FACING).getOpposite() == facing && !state.isValidPosition(w, currentPos) ? Blocks.AIR.getDefaultState() : state;
     }
-    
-    @Override
-    public BlockRenderLayer getRenderLayer() 
-    {
-        return BlockRenderLayer.TRANSLUCENT;
-    }
 }

+ 3 - 16
src/main/java/me/km/blocks/BlockSpikes.java

@@ -5,7 +5,6 @@ import net.minecraft.block.BlockState;
 import net.minecraft.block.Blocks;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
-import net.minecraft.util.BlockRenderLayer;
 import net.minecraft.util.DamageSource;
 import net.minecraft.util.Direction;
 import net.minecraft.util.math.BlockPos;
@@ -22,7 +21,7 @@ public class BlockSpikes extends Block
 
     public BlockSpikes(String name, Properties properties)
     {
-        super(properties);
+        super(properties.notSolid());
         super.setRegistryName(name);
     }
 
@@ -35,24 +34,18 @@ public class BlockSpikes extends Block
     @Override
     public boolean isValidPosition(BlockState state, IWorldReader w, BlockPos pos)
     {
-        return func_220064_c(w, pos.down()); // from RedstoneDiodeBlock
+        return hasSolidSideOnTop(w, pos.down()); // from RedstoneDiodeBlock
     }
 
     @Override
     public void onEntityCollision(BlockState state, World w, BlockPos pos, Entity ent)
     {
-        if(!ent.isSneaking() && ent instanceof LivingEntity)
+        if(!ent.isCrouching() && ent instanceof LivingEntity)
         {
             ent.attackEntityFrom(DamageSource.CACTUS, 1.0F);
         }
     }
 
-    @Override
-    public boolean isSolid(BlockState state)
-    {
-        return false;
-    }
-
     @Override
     public boolean isNormalCube(BlockState state, IBlockReader worldIn, BlockPos pos)
     {
@@ -65,10 +58,4 @@ public class BlockSpikes extends Block
         return !stateIn.isValidPosition(w, currentPos) ? Blocks.AIR.getDefaultState() : 
                 super.updatePostPlacement(stateIn, facing, facingState, w, currentPos, facingPos);
     }
-
-    @Override
-    public BlockRenderLayer getRenderLayer()
-    {
-        return BlockRenderLayer.CUTOUT;
-    }
 }

+ 4 - 2
src/main/java/me/km/blocks/ModBlocks.java

@@ -116,14 +116,16 @@ public class ModBlocks
     
     private static Block createLeaves(String registry)
     {
-        Block b = new LeavesBlock(Block.Properties.create(Material.LEAVES).hardnessAndResistance(0.2f).tickRandomly().sound(SoundType.PLANT));
+        Block b = new LeavesBlock(Block.Properties.create(Material.LEAVES).hardnessAndResistance(0.2f).tickRandomly().sound(SoundType.PLANT).notSolid());
         b.setRegistryName(registry);
         return b;
     }
     
     private static Block createSapling(String registry, BlockState wood, BlockState leaves)
     {
-        Block b = new BlockModSapling(new ModTree(wood, leaves));
+        ModTree tree = new ModTree();
+        BlockModSapling b = new BlockModSapling(tree);
+        tree.setConfig(wood, leaves, b);
         b.setRegistryName(registry);
         return b;
     }

+ 19 - 12
src/main/java/me/km/blocks/ModTree.java

@@ -4,25 +4,32 @@ import java.util.Random;
 import javax.annotation.Nullable;
 import net.minecraft.block.BlockState;
 import net.minecraft.block.trees.Tree;
-import net.minecraft.world.gen.feature.AbstractTreeFeature;
-import net.minecraft.world.gen.feature.NoFeatureConfig;
-import net.minecraft.world.gen.feature.TreeFeature;
+import net.minecraft.world.gen.blockstateprovider.SimpleBlockStateProvider;
+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.foliageplacer.BlobFoliagePlacer;
+import net.minecraftforge.common.IPlantable;
 
 public class ModTree extends Tree
 {
-    private final BlockState wood;
-    private final BlockState leaves;
+    private TreeFeatureConfig treeConfig = null;
     
-    public ModTree(BlockState wood, BlockState leaves)
+    @Nullable
+    @Override
+    protected ConfiguredFeature<TreeFeatureConfig, ?> getTreeFeature(Random r, boolean p_225546_2_)
     {
-        this.wood = wood;
-        this.leaves = leaves;
+        return Feature.NORMAL_TREE.withConfiguration(treeConfig);
     }
     
-    @Nullable
-    @Override
-    protected AbstractTreeFeature<NoFeatureConfig> getTreeFeature(Random random)
+    public void setConfig(BlockState wood, BlockState leaves, IPlantable sapling)
     {
-        return new TreeFeature(NoFeatureConfig::deserialize, true, 4, wood, leaves, false);
+        treeConfig = (new TreeFeatureConfig.Builder(new SimpleBlockStateProvider(wood), new SimpleBlockStateProvider(leaves), new BlobFoliagePlacer(2, 0)))
+                    .baseHeight(5)
+                    .heightRandA(2)
+                    .foliageHeight(3)
+                    .ignoreVines()
+                    .setSapling(sapling)
+                    .build();
     }
 }

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

@@ -18,10 +18,11 @@ import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.BlockRayTraceResult;
 import net.minecraft.world.IBlockReader;
 import net.minecraft.world.World;
+import net.minecraft.util.ActionResultType;
 
 public class BlockCookingPot extends CauldronBlock implements ITileEntityProvider
 {
-    public BlockCookingPot(String name) 
+    public BlockCookingPot(String name)
     {
         super(Block.Properties.create(Material.IRON, MaterialColor.BROWN).hardnessAndResistance(2.0f));
         this.setRegistryName(name);
@@ -46,64 +47,62 @@ public class BlockCookingPot extends CauldronBlock implements ITileEntityProvide
     }
 
     @Override
-    public boolean onBlockActivated(BlockState state, World w, BlockPos pos, PlayerEntity p, Hand hand, BlockRayTraceResult hit)
+    public ActionResultType onBlockActivated(BlockState state, World w, BlockPos pos, PlayerEntity p, Hand hand, BlockRayTraceResult hit)
     {
-        if(w.isRemote)
+        TileEntity te = w.getTileEntity(pos);
+        if(te instanceof TileEntityCookingPot)
         {
-            return true;
-        }
-        else
-        {
-            TileEntity te = w.getTileEntity(pos);
-            if(te instanceof TileEntityCookingPot)
+            TileEntityCookingPot cauldron = (TileEntityCookingPot) te;
+            ItemStack stack = p.getHeldItem(hand);
+            if(stack.isEmpty())
             {
-                TileEntityCookingPot cauldron = (TileEntityCookingPot) te;
-                ItemStack stack = p.getHeldItem(hand);
-                if(stack.isEmpty())
-                {
-                    return true;
-                }
-                else if(stack.getItem() == Items.BOWL)
+                return ActionResultType.PASS;
+            }
+            else if(stack.getItem() == Items.BOWL)
+            {
+                int waterLevel = state.get(LEVEL);
+                if(waterLevel > 0 && !w.isRemote)
                 {
-                    int waterLevel = state.get(LEVEL);
-                    if(waterLevel > 0)
+                    ItemStack stew = new ItemStack(ModItems.coloredSoup);
+                    ItemColoredSoup.addIngredient(stew, cauldron.getIngredients());
+                    ItemColoredSoup.setColor(stew, cauldron.getColor().getRGB());
+                    ItemColoredSoup.setFoodStats(stew, cauldron.getIngredients());
+                    stack.shrink(1);
+                    if(stack.isEmpty())
                     {
-                        ItemStack stew = new ItemStack(ModItems.coloredSoup);
-                        ItemColoredSoup.addIngredient(stew, cauldron.getIngredients());
-                        ItemColoredSoup.setColor(stew, cauldron.getColor().getRGB());
-                        ItemColoredSoup.setFoodStats(stew, cauldron.getIngredients());
-                        stack.shrink(1);
-                        if(stack.isEmpty())
-                        {
-                            p.setHeldItem(hand, stew);
-                        }
-                        else if(!p.inventory.addItemStackToInventory(stew))
-                        {
-                            p.dropItem(stew, false);
-                        }
-                        else if(p instanceof ServerPlayerEntity)
-                        {
-                            ((ServerPlayerEntity) p).sendContainerToPlayer(p.container);
-                        }
-                        this.setWaterLevel(w, pos, state, waterLevel - 1);
+                        p.setHeldItem(hand, stew);
                     }
-                    return true;
-                }
-                if(cauldron.getNumberOfIngredients() < 3 && cauldron.addItemStack(stack))
-                {
-                    if(!p.isCreative())
+                    else if(!p.inventory.addItemStackToInventory(stew))
+                    {
+                        p.dropItem(stew, false);
+                    }
+                    else if(p instanceof ServerPlayerEntity)
                     {
-                        stack.shrink(1);
+                        ((ServerPlayerEntity) p).sendContainerToPlayer(p.container);
                     }
-                    return true;
+                    this.setWaterLevel(w, pos, state, waterLevel - 1);
+                }
+                return ActionResultType.SUCCESS;
+            }
+            int ingredients = cauldron.getNumberOfIngredients();
+            if(ingredients < 3 && cauldron.addItemStack(stack, !w.isRemote))
+            {
+                if(!w.isRemote && !p.isCreative())
+                {
+                    stack.shrink(1);
                 }
+                return ActionResultType.SUCCESS;
+            }
+            if(ingredients > 0)
+            {
+                return ActionResultType.PASS;
             }
-            return super.onBlockActivated(state, w, pos, p, hand, hit);
         }
+        return super.onBlockActivated(state, w, pos, p, hand, hit);
     }
-
+    
     @Override
-    public void setWaterLevel(World w, BlockPos pos, BlockState state, int level) 
+    public void setWaterLevel(World w, BlockPos pos, BlockState state, int level)
     {
         if(level <= 0 && !w.isRemote)
         {
@@ -115,4 +114,18 @@ public class BlockCookingPot extends CauldronBlock implements ITileEntityProvide
         }
         super.setWaterLevel(w, pos, state, level);
     }
+
+    @Override
+    public void fillWithRain(World w, BlockPos pos)
+    {
+        if(!w.isRemote)
+        {
+            TileEntity te = w.getTileEntity(pos);
+            if(te instanceof TileEntityCookingPot)
+            {
+                ((TileEntityCookingPot) te).reset();
+            }
+        }
+        super.fillWithRain(w, pos);
+    }
 }

+ 2 - 8
src/main/java/me/km/blocks/cookingpot/CookingPotColorMixer.java

@@ -69,7 +69,7 @@ public class CookingPotColorMixer
         return items;
     }
     
-    private Color getItemColor(ItemStack stack)
+    public Color getItemColor(ItemStack stack)
     {
         Item item = stack.getItem();
         if(item == Items.PUMPKIN) { return PUMPKIN; }
@@ -103,19 +103,13 @@ public class CookingPotColorMixer
         return null;
     }
 
-    public boolean addColor(ItemStack stack)
+    public void addColor(ItemStack stack, Color c)
     {
-        Color c = getItemColor(stack);
-        if(c == null)
-        {
-            return false;
-        }
         colors.add(c);
         ItemStack copy = stack.copy();
         copy.setCount(1);
         items.add(copy);
         cachedColor = mixColors();
-        return true;
     }
     
     public void cache()

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

@@ -94,15 +94,20 @@ public class TileEntityCookingPot extends TileEntity
         mixer.reset();
     }
     
-    public boolean addItemStack(ItemStack stack)
+    public boolean addItemStack(ItemStack stack, boolean server)
     {
-        boolean b = mixer.addColor(stack);
-        if(b)
+        Color c = mixer.getItemColor(stack);
+        if(c == null)
         {
+            return false;
+        }
+        if(server)
+        {
+            mixer.addColor(stack, c);
             notifyBlockUpdate();
             markDirty();
         }
-        return b;
+        return true;
     }
 
     public void setColor(int red, int green, int blue)

+ 10 - 3
src/main/java/me/km/entities/EntityHuman.java

@@ -32,6 +32,7 @@ public class EntityHuman extends CreatureEntity
     private static final DataParameter<Float> SCALE = EntityDataManager.createKey(EntityHuman.class, DataSerializers.FLOAT);
     private static final DataParameter<Boolean> SLIM = EntityDataManager.createKey(EntityHuman.class, DataSerializers.BOOLEAN);
     
+    private float lastScale = 1.0f;
     private final float originalWidth;
     private final float originalHeight;
     private EntitySize size;
@@ -75,6 +76,11 @@ public class EntityHuman extends CreatureEntity
     public final void setScale(float scale)
     {
         this.getDataManager().set(SCALE, scale);
+        updateSize(scale);
+    }
+    
+    private void updateSize(float scale)
+    {
         this.setSize(originalWidth * scale, originalHeight * scale);
     }
     
@@ -275,16 +281,17 @@ public class EntityHuman extends CreatureEntity
     
     private void setSize(float w, float h)
     {
-        size = EntitySize.fixed(w, h);
+        size = EntitySize.flexible(w, h);
+        recalculateSize();
     }
 
     @Override
     public void notifyDataManagerChange(DataParameter<?> key)
     {
         super.notifyDataManagerChange(key);
-        if(key == SCALE)
+        if(SCALE.equals(key))
         {
-            setScale(getScale());
+            updateSize(getScale());
         }
     }
 }

+ 7 - 9
src/main/java/me/km/entities/EntityItemProjectile.java

@@ -29,7 +29,7 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
 
     public EntityItemProjectile(LivingEntity thrower, ItemStack stack, float damage)
     {
-        super(thrower.world, thrower.posX, thrower.posY + thrower.getEyeHeight() - 0.1d, thrower.posZ, stack);
+        super(thrower.world, thrower.getPosX(), thrower.getPosY() + thrower.getEyeHeight() - 0.1d, thrower.getPosZ(), stack);
         this.owner = thrower;
         super.setInfinitePickupDelay();
         this.damage = damage;
@@ -63,7 +63,7 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
                 .add(rand.nextGaussian() * 0.0075 * inaccuracy, rand.nextGaussian() * 0.0075 * inaccuracy, rand.nextGaussian() * 0.0075 * inaccuracy)
                 .scale(velocity);
         setMotion(vec3d);
-        float f1 = MathHelper.sqrt(func_213296_b(vec3d));
+        float f1 = MathHelper.sqrt(horizontalMag(vec3d));
         this.rotationYaw = (float) (MathHelper.atan2(x, z) * (180.0 / Math.PI));
         this.rotationPitch = (float) (MathHelper.atan2(y, f1) * (180.0 / Math.PI));
         this.prevRotationYaw = this.rotationYaw;
@@ -122,7 +122,7 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
             }
         }
 
-        RayTraceResult ray = ProjectileHelper.func_221267_a(this, axisalignedbb, 
+        RayTraceResult ray = ProjectileHelper.rayTrace(this, axisalignedbb, 
                 (p) -> !p.isSpectator() && p.canBeCollidedWith() && p != this.ignoreEntity, RayTraceContext.BlockMode.OUTLINE, true);
         if(this.ignoreEntity != null && this.ignoreTime-- <= 0)
         {
@@ -144,10 +144,8 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
         }
 
         Vec3d vec3d = this.getMotion();
-        this.posX += vec3d.x;
-        this.posY += vec3d.y;
-        this.posZ += vec3d.z;
-        float f = MathHelper.sqrt(func_213296_b(vec3d));
+        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));
 
         for(this.rotationPitch = (float) (MathHelper.atan2(vec3d.y, (double) f) * (double) (180F / (float) Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F)
@@ -176,7 +174,7 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
         {
             for(int i = 0; i < 4; ++i)
             {
-                this.world.addParticle(ParticleTypes.BUBBLE, this.posX - vec3d.x * 0.25D, this.posY - vec3d.y * 0.25D, this.posZ - vec3d.z * 0.25D, vec3d.x, vec3d.y, vec3d.z);
+                this.world.addParticle(ParticleTypes.BUBBLE, getPosX() - vec3d.x * 0.25D, getPosY() - vec3d.y * 0.25D, getPosZ() - vec3d.z * 0.25D, vec3d.x, vec3d.y, vec3d.z);
             }
             f1 = 0.8F;
         }
@@ -192,6 +190,6 @@ public class EntityItemProjectile extends ItemEntity implements IProjectile
             this.setMotion(vec3d1.x, vec3d1.y - 0.03, vec3d1.z);
         }
 
-        this.setPosition(this.posX, this.posY, this.posZ);
+        this.setPosition(getPosX(), getPosY(), getPosZ());
     }
 }

+ 73 - 4
src/main/java/me/km/entities/HumanSkinLoader.java

@@ -6,7 +6,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.function.Consumer;
 import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.DownloadImageBuffer;
 import net.minecraft.client.renderer.texture.DynamicTexture;
 import net.minecraft.client.renderer.texture.NativeImage;
 import net.minecraft.client.renderer.texture.TextureManager;
@@ -26,7 +25,6 @@ public class HumanSkinLoader
     private final HashSet<String> loading = new HashSet<>();
 
     private final TextureManager manager = Minecraft.getInstance().getRenderManager().textureManager;
-    private final DownloadImageBuffer converter = new DownloadImageBuffer();
 
     private HumanSkinLoader()
     {
@@ -70,7 +68,7 @@ public class HumanSkinLoader
                 {
                     // Failed own server, trying crafatar
                     httpurlconnection.disconnect();
-                    httpurlconnection = (HttpURLConnection) (new URL("https://crafatar.com/skins/" + name + ".png"))
+                    httpurlconnection = (HttpURLConnection) (new URL("https://crafatar.com/skins/" + name + ".png")) 
                             .openConnection(Minecraft.getInstance().getProxy());
                     httpurlconnection.setDoInput(true);
                     httpurlconnection.setDoOutput(false);
@@ -83,7 +81,7 @@ public class HumanSkinLoader
                     }
                 }
 
-                NativeImage image = converter.parseUserSkin(NativeImage.read(httpurlconnection.getInputStream()));
+                NativeImage image = convert(NativeImage.read(httpurlconnection.getInputStream()));
                 Minecraft.getInstance().enqueue(() -> delayed.accept(image));
             }
             catch(Exception ex)
@@ -99,4 +97,75 @@ public class HumanSkinLoader
             }
         }).start();
     }
+    
+    private NativeImage convert(NativeImage old)
+    {
+        boolean flag = old.getHeight() == 32;
+        if (flag) 
+        {
+            NativeImage nativeimage = new NativeImage(64, 64, true);
+            nativeimage.copyImageData(old);
+            old.close();
+            old = nativeimage;
+            nativeimage.fillAreaRGBA(0, 32, 64, 32, 0);
+            nativeimage.copyAreaRGBA(4, 16, 16, 32, 4, 4, true, false);
+            nativeimage.copyAreaRGBA(8, 16, 16, 32, 4, 4, true, false);
+            nativeimage.copyAreaRGBA(0, 20, 24, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(4, 20, 16, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(8, 20, 8, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(12, 20, 16, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(44, 16, -8, 32, 4, 4, true, false);
+            nativeimage.copyAreaRGBA(48, 16, -8, 32, 4, 4, true, false);
+            nativeimage.copyAreaRGBA(40, 20, 0, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(44, 20, -8, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(48, 20, -16, 32, 4, 12, true, false);
+            nativeimage.copyAreaRGBA(52, 20, -8, 32, 4, 12, true, false);
+        }
+
+        setAreaOpaque(old, 0, 0, 32, 16);
+        if (flag) 
+        {
+            setAreaTransparent(old, 32, 0, 64, 32);
+        }
+
+        setAreaOpaque(old, 0, 16, 64, 32);
+        setAreaOpaque(old, 16, 48, 48, 64);
+        return old;
+    }
+    
+    private static void setAreaTransparent(NativeImage image, int x, int y, int width, int height)
+    {
+        for(int i = x; i < width; ++i)
+        {
+            for(int j = y; j < height; ++j)
+            {
+                int k = image.getPixelRGBA(i, j);
+                if((k >> 24 & 255) < 128)
+                {
+                    return;
+                }
+            }
+        }
+
+        for(int l = x; l < width; ++l)
+        {
+            for(int i1 = y; i1 < height; ++i1)
+            {
+                image.setPixelRGBA(l, i1, image.getPixelRGBA(l, i1) & 16777215);
+            }
+        }
+
+    }
+
+    private static void setAreaOpaque(NativeImage image, int x, int y, int width, int height)
+    {
+        for(int i = x; i < width; ++i)
+        {
+            for(int j = y; j < height; ++j)
+            {
+                image.setPixelRGBA(i, j, image.getPixelRGBA(i, j) | -16777216);
+            }
+        }
+
+    }
 }

+ 4 - 4
src/main/java/me/km/entities/ModEntities.java

@@ -47,19 +47,19 @@ public class ModEntities
     @OnlyIn(Dist.CLIENT)
     private static void initClient() 
     {
-        RenderingRegistry.registerEntityRenderingHandler(EntityBrownBear.class, (rm) -> 
+        RenderingRegistry.registerEntityRenderingHandler(BROWN_BEAR, (rm) -> 
         {
             return new RenderBrownBear(rm);
         });
-        RenderingRegistry.registerEntityRenderingHandler(EntityBlackBear.class, (rm) -> 
+        RenderingRegistry.registerEntityRenderingHandler(BLACK_BEAR, (rm) -> 
         {
             return new RenderBlackBear(rm);
         });
-        RenderingRegistry.registerEntityRenderingHandler(EntityHuman.class, (rm) -> 
+        RenderingRegistry.registerEntityRenderingHandler(HUMAN, (rm) -> 
         {
             return new RenderHuman(rm);
         });
-        RenderingRegistry.registerEntityRenderingHandler(EntityNobody.class, (rm) -> 
+        RenderingRegistry.registerEntityRenderingHandler(NOBODY, (rm) -> 
         {
             return new RenderNobody(rm);
         });

+ 0 - 27
src/main/java/me/km/entities/ModelHuman.java

@@ -1,6 +1,5 @@
 package me.km.entities;
 
-import com.mojang.blaze3d.platform.GlStateManager;
 import net.minecraft.client.renderer.entity.model.PlayerModel;
 
 public class ModelHuman extends PlayerModel<EntityHuman>
@@ -9,30 +8,4 @@ public class ModelHuman extends PlayerModel<EntityHuman>
     {
         super(modelSize, smallArmsIn);
     }
-    
-    @Override
-    public void render(EntityHuman ent, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale)
-    {
-        this.setRotationAngles(ent, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale);
-        GlStateManager.pushMatrix();
-
-        float factor = ent.getScale();
-        GlStateManager.translatef(0.0F, -1.5f * factor + 1.5f, 0.0F);
-        GlStateManager.scalef(factor, factor, factor);
-
-        this.bipedHead.render(scale);
-        this.bipedBody.render(scale);
-        this.bipedRightArm.render(scale);
-        this.bipedLeftArm.render(scale);
-        this.bipedRightLeg.render(scale);
-        this.bipedLeftLeg.render(scale);
-        this.bipedHeadwear.render(scale);
-        this.bipedLeftLegwear.render(scale);
-        this.bipedRightLegwear.render(scale);
-        this.bipedLeftArmwear.render(scale);
-        this.bipedRightArmwear.render(scale);
-        this.bipedBodyWear.render(scale);
-
-        GlStateManager.popMatrix();
-    }
 }

+ 5 - 5
src/main/java/me/km/entities/RenderBlackBear.java

@@ -1,6 +1,6 @@
 package me.km.entities;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.matrix.MatrixStack;
 import me.km.KajetansMod;
 import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.renderer.entity.MobRenderer;
@@ -20,15 +20,15 @@ public class RenderBlackBear extends MobRenderer<EntityBlackBear, PolarBearModel
     }
 
     @Override
-    protected ResourceLocation getEntityTexture(EntityBlackBear entity)
+    public ResourceLocation getEntityTexture(EntityBlackBear entity)
     {
         return BLACK_BEAR_TEXTURE;
     }
 
     @Override
-    protected void preRenderCallback(EntityBlackBear ent, float partialTickTime)
+    protected void preRenderCallback(EntityBlackBear ent, MatrixStack mStack, float partialTickTime) 
     {
-        GlStateManager.scalef(1.2F, 1.2F, 1.2F);
-        super.preRenderCallback(ent, partialTickTime);
+        mStack.scale(1.2F, 1.2F, 1.2F);
+        super.preRenderCallback(ent, mStack, partialTickTime);
     }
 }

+ 5 - 5
src/main/java/me/km/entities/RenderBrownBear.java

@@ -1,6 +1,6 @@
 package me.km.entities;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.matrix.MatrixStack;
 import me.km.KajetansMod;
 import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.client.renderer.entity.MobRenderer;
@@ -20,15 +20,15 @@ public class RenderBrownBear extends MobRenderer<EntityBrownBear, PolarBearModel
     }
 
     @Override
-    protected ResourceLocation getEntityTexture(EntityBrownBear entity)
+    public ResourceLocation getEntityTexture(EntityBrownBear entity)
     {
         return BLACK_BEAR_TEXTURE;
     }
 
     @Override
-    protected void preRenderCallback(EntityBrownBear ent, float partialTickTime)
+    protected void preRenderCallback(EntityBrownBear ent, MatrixStack mStack, float partialTickTime) 
     {
-        GlStateManager.scalef(1.2F, 1.2F, 1.2F);
-        super.preRenderCallback(ent, partialTickTime);
+        mStack.scale(1.2F, 1.2F, 1.2F);
+        super.preRenderCallback(ent, mStack, partialTickTime);
     }
 }

+ 100 - 30
src/main/java/me/km/entities/RenderHuman.java

@@ -1,20 +1,28 @@
 package me.km.entities;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+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;
+import net.minecraft.client.renderer.entity.layers.BeeStingerLayer;
 import net.minecraft.client.renderer.entity.layers.BipedArmorLayer;
 import net.minecraft.client.renderer.entity.layers.ElytraLayer;
 import net.minecraft.client.renderer.entity.layers.HeadLayer;
 import net.minecraft.client.renderer.entity.layers.HeldItemLayer;
 import net.minecraft.client.renderer.entity.model.BipedModel;
+import net.minecraft.client.renderer.entity.model.PlayerModel;
+import net.minecraft.entity.Entity;
 import net.minecraft.item.CrossbowItem;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.Items;
 import net.minecraft.item.UseAction;
 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.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
@@ -23,54 +31,68 @@ public class RenderHuman extends LivingRenderer<EntityHuman, ModelHuman>
 {
     private final ModelHuman steve;
     private final ModelHuman alex;
-
-    public RenderHuman(EntityRendererManager erm)
+    
+    public RenderHuman(EntityRendererManager renderManager)
     {
-        super(erm, new ModelHuman(0.0f, false), 0.5f);
+        super(renderManager, new ModelHuman(0.0f, false), 0.5F);
         this.addLayer(new BipedArmorLayer<>(this, new BipedModel(0.5F), new BipedModel(1.0F)));
         this.addLayer(new HeldItemLayer<>(this));
         this.addLayer(new ArrowLayer<>(this));
         this.addLayer(new HeadLayer<>(this));
         this.addLayer(new ElytraLayer<>(this));
-
+        this.addLayer(new BeeStingerLayer<>(this));
+        
         this.steve = this.getEntityModel();
         this.alex = new ModelHuman(0, true);
     }
 
     @Override
-    public void doRender(EntityHuman ent, double x, double y, double z, float entityYaw, float partialTicks)
+    public void render(EntityHuman ent, float entityYaw, float partialRenderTick, MatrixStack mStack, IRenderTypeBuffer buffer, int light)
     {
         this.setModelVisibilities(ent);
-        GlStateManager.setProfile(GlStateManager.Profile.PLAYER_SKIN);
         if(ent.isSlim())
         {
             this.entityModel = alex;
-            super.doRender(ent, x, y, z, entityYaw, partialTicks);
+            super.render(ent, entityYaw, partialRenderTick, mStack, buffer, light);
             this.entityModel = steve;
         }
         else
         {
-            super.doRender(ent, x, y, z, entityYaw, partialTicks);
+            super.render(ent, entityYaw, partialRenderTick, mStack, buffer, light);
         }
-        GlStateManager.unsetProfile(GlStateManager.Profile.PLAYER_SKIN);
+    }
+
+    @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_);
     }
 
     private void setModelVisibilities(EntityHuman ent)
     {
-        ModelHuman playermodel = this.getEntityModel();
-        
-        playermodel.setVisible(true);
-        playermodel.bipedHeadwear.showModel = true;
-        playermodel.bipedBodyWear.showModel = true;
-        playermodel.bipedLeftLegwear.showModel = true;
-        playermodel.bipedRightLegwear.showModel = true;
-        playermodel.bipedLeftArmwear.showModel = true;
-        playermodel.bipedRightArmwear.showModel = true;
-        playermodel.isSneak = false;
-        ItemStack mainHand = ent.getHeldItemMainhand();
-        ItemStack offHand = ent.getHeldItemOffhand();
-        playermodel.rightArmPose = getArmPose(ent, mainHand, offHand, Hand.MAIN_HAND);
-        playermodel.leftArmPose = getArmPose(ent, mainHand, offHand, Hand.OFF_HAND);
+        PlayerModel<EntityHuman> m = this.getEntityModel();
+        ItemStack mainStack = ent.getHeldItemMainhand();
+        ItemStack offStack = ent.getHeldItemOffhand();
+        m.setVisible(true);
+        m.bipedHeadwear.showModel = true;
+        m.bipedBodyWear.showModel = true;
+        m.bipedLeftLegwear.showModel = true;
+        m.bipedRightLegwear.showModel = true;
+        m.bipedLeftArmwear.showModel = true;
+        m.bipedRightArmwear.showModel = true;
+        m.isSneak = ent.isCrouching();
+        BipedModel.ArmPose mainHand = getArmPose(ent, mainStack, offStack, Hand.MAIN_HAND);
+        BipedModel.ArmPose offHand = getArmPose(ent, mainStack, offStack, Hand.OFF_HAND);
+        if(ent.getPrimaryHand() == HandSide.RIGHT)
+        {
+            m.rightArmPose = mainHand;
+            m.leftArmPose = offHand;
+        }
+        else
+        {
+            m.rightArmPose = offHand;
+            m.leftArmPose = mainHand;
+        }
     }
 
     private BipedModel.ArmPose getArmPose(EntityHuman ent, ItemStack mainStack, ItemStack offStack, Hand hand)
@@ -102,12 +124,16 @@ public class RenderHuman extends LivingRenderer<EntityHuman, ModelHuman>
             }
             else
             {
-                if(mainStack.getItem() == Items.CROSSBOW && CrossbowItem.isCharged(mainStack))
+                boolean flag3 = mainStack.getItem() == Items.CROSSBOW;
+                boolean flag = CrossbowItem.isCharged(mainStack);
+                boolean flag1 = offStack.getItem() == Items.CROSSBOW;
+                boolean flag2 = CrossbowItem.isCharged(offStack);
+                if(flag3 && flag)
                 {
                     pose = BipedModel.ArmPose.CROSSBOW_HOLD;
                 }
 
-                if(offStack.getItem() == Items.CROSSBOW && CrossbowItem.isCharged(offStack) && mainStack.getItem().getUseAction(mainStack) == UseAction.NONE)
+                if(flag1 && flag2 && mainStack.getItem().getUseAction(mainStack) == UseAction.NONE)
                 {
                     pose = BipedModel.ArmPose.CROSSBOW_HOLD;
                 }
@@ -122,10 +148,54 @@ public class RenderHuman extends LivingRenderer<EntityHuman, ModelHuman>
     {
         return ent.getTexture();
     }
-
+    
     @Override
-    protected void preRenderCallback(EntityHuman ent, float partialTickTime)
+    protected void preRenderCallback(EntityHuman ent, MatrixStack mStack, float partialTickTime)
     {
-        GlStateManager.scalef(0.9375F, 0.9375F, 0.9375F);
+        mStack.scale(0.9375F, 0.9375F, 0.9375F);
+        float factor = ent.getScale();
+        mStack.scale(factor, factor, factor);
+    }
+    
+    @Override
+    protected void applyRotations(EntityHuman ent, MatrixStack mStack, float ageInTicks, float rotationYaw, float partialTicks)
+    {
+        float f = ent.getSwimAnimation(partialTicks);
+        if(ent.isElytraFlying())
+        {
+            super.applyRotations(ent, mStack, ageInTicks, rotationYaw, partialTicks);
+            float f1 = ent.getTicksElytraFlying() + partialTicks;
+            float f2 = MathHelper.clamp(f1 * f1 / 100.0F, 0.0F, 1.0F);
+            if(!ent.isSpinAttacking())
+            {
+                mStack.rotate(Vector3f.XP.rotationDegrees(f2 * (-90.0F - ent.rotationPitch)));
+            }
+
+            Vec3d vec3d = ent.getLook(partialTicks);
+            Vec3d vec3d1 = ent.getMotion();
+            double d0 = Entity.horizontalMag(vec3d1);
+            double d1 = Entity.horizontalMag(vec3d);
+            if(d0 > 0.0D && d1 > 0.0D)
+            {
+                double d2 = (vec3d1.x * vec3d.x + vec3d1.z * vec3d.z) / (Math.sqrt(d0) * Math.sqrt(d1));
+                double d3 = vec3d1.x * vec3d.z - vec3d1.z * vec3d.x;
+                mStack.rotate(Vector3f.YP.rotation((float) (Math.signum(d3) * Math.acos(d2))));
+            }
+        }
+        else if(f > 0.0F)
+        {
+            super.applyRotations(ent, mStack, ageInTicks, rotationYaw, partialTicks);
+            float f3 = ent.isInWater() ? -90.0F - ent.rotationPitch : -90.0F;
+            float f4 = MathHelper.lerp(f, 0.0F, f3);
+            mStack.rotate(Vector3f.XP.rotationDegrees(f4));
+            if(ent.isActualySwimming())
+            {
+                mStack.translate(0.0D, -1.0D, (double) 0.3F);
+            }
+        }
+        else
+        {
+            super.applyRotations(ent, mStack, ageInTicks, rotationYaw, partialTicks);
+        }
     }
-}
+}

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

@@ -15,7 +15,7 @@ public class RenderNobody extends EntityRenderer<EntityNobody>
     }
 
     @Override
-    protected ResourceLocation getEntityTexture(EntityNobody entity)
+    public ResourceLocation getEntityTexture(EntityNobody entity)
     {
         return null;
     }

+ 4 - 1
src/main/java/me/km/events/PlayerMoveData.java

@@ -76,7 +76,10 @@ public class PlayerMoveData
     
     public boolean check(ServerPlayerEntity p)    
     {
-        if(p.world != w || p.posX < minX || p.posX > maxX || p.posZ < minZ || p.posZ > maxZ || p.posY < minY || p.posY > maxY)
+        double posX = p.getPosX();
+        double posY = p.getPosY();
+        double posZ = p.getPosZ();
+        if(p.world != w || posX < minX || posX > maxX || posZ < minZ || posZ > maxZ || posY < minY || posY > maxY)
         {
             return false;
         }

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

@@ -20,7 +20,7 @@ import net.minecraft.potion.Effects;
 import net.minecraft.util.text.ITextComponent;
 import net.minecraft.util.text.StringTextComponent;
 import net.minecraft.util.text.TextFormatting;
-import net.minecraft.util.text.translation.LanguageMap;
+import net.minecraft.util.text.LanguageMap;
 import net.minecraft.world.World;
 import net.minecraftforge.common.capabilities.ICapabilityProvider;
 import net.minecraftforge.api.distmarker.Dist;
@@ -99,7 +99,7 @@ public class ItemColoredSoup extends ItemFood
         ListNBT list = com.getList("ingredients", 8);
         for(ItemStack stack : stacks)
         {
-            list.add(new StringNBT(stack.getTranslationKey()));
+            list.add(StringNBT.valueOf(stack.getTranslationKey()));
         }
     }
     

+ 1 - 1
src/main/java/me/km/items/ItemSling.java

@@ -101,7 +101,7 @@ public class ItemSling extends Item
                         w.addEntity(proj);
                     }
 
-                    w.playSound(null, p.posX, p.posY, p.posZ, SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0f, 1.0f / (random.nextFloat() * 0.4f + 1.2f) + f * 0.5f);
+                    w.playSound(null, p.getPosX(), p.getPosY(), p.getPosZ(), SoundEvents.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0f, 1.0f / (random.nextFloat() * 0.4f + 1.2f) + f * 0.5f);
                     if(!p.abilities.isCreativeMode)
                     {
                         ammo.shrink(1);

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

@@ -5,7 +5,7 @@ import net.minecraft.inventory.EquipmentSlotType;
 import net.minecraft.item.IArmorMaterial;
 import net.minecraft.item.Items;
 import net.minecraft.item.crafting.Ingredient;
-import net.minecraft.util.LazyLoadBase;
+import net.minecraft.util.LazyValue;
 import net.minecraft.util.SoundEvent;
 import net.minecraft.util.SoundEvents;
 import net.minecraftforge.api.distmarker.Dist;
@@ -30,7 +30,7 @@ public enum ModArmorMaterial implements IArmorMaterial
     private final int enchantability;
     private final SoundEvent soundEvent;
     private final float toughness;
-    private final LazyLoadBase<Ingredient> repairMaterial;
+    private final LazyValue<Ingredient> repairMaterial;
 
     private ModArmorMaterial(String name, int maxDamageFactor, int[] damageReduction, int enchantability, SoundEvent se, float toughness, Supplier<Ingredient> repairMaterial)
     {
@@ -40,7 +40,7 @@ public enum ModArmorMaterial implements IArmorMaterial
         this.enchantability = enchantability;
         this.soundEvent = se;
         this.toughness = toughness;
-        this.repairMaterial = new LazyLoadBase<>(repairMaterial);
+        this.repairMaterial = new LazyValue<>(repairMaterial);
     }
 
     @Override

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

@@ -4,7 +4,7 @@ import java.util.function.Supplier;
 import net.minecraft.item.Items;
 import net.minecraft.item.IItemTier;
 import net.minecraft.item.crafting.Ingredient;
-import net.minecraft.util.LazyLoadBase;
+import net.minecraft.util.LazyValue;
 
 public enum ModItemTier implements IItemTier
 {
@@ -20,7 +20,7 @@ public enum ModItemTier implements IItemTier
     private final float efficiency;
     private final float attackDamage;
     private final int enchantability;
-    private final LazyLoadBase<Ingredient> repairMaterial;
+    private final LazyValue<Ingredient> repairMaterial;
 
     private ModItemTier(int harvestLevelIn, int maxUsesIn, float efficiencyIn, float attackDamageIn, int enchantabilityIn, Supplier<Ingredient> repairMaterialIn)
     {
@@ -29,7 +29,7 @@ public enum ModItemTier implements IItemTier
         this.efficiency = efficiencyIn;
         this.attackDamage = attackDamageIn;
         this.enchantability = enchantabilityIn;
-        this.repairMaterial = new LazyLoadBase<>(repairMaterialIn);
+        this.repairMaterial = new LazyValue<>(repairMaterialIn);
     }
 
     @Override

+ 20 - 22
src/main/java/me/km/items/ModelCylinder.java

@@ -1,8 +1,8 @@
 package me.km.items;
 
 import net.minecraft.client.renderer.entity.model.BipedModel;
-import net.minecraft.client.renderer.entity.model.RendererModel;
-import net.minecraft.entity.Entity;
+import net.minecraft.client.renderer.model.ModelRenderer;
+import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.item.ArmorStandEntity;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
@@ -12,42 +12,41 @@ public class ModelCylinder extends BipedModel
 {
     private final static float FACTOR = ((float) Math.PI / 180.0f);
     
-    private final RendererModel firstHeadPart;
-    private final RendererModel secHeadPart;
+    private final ModelRenderer firstHeadPart;
+    private final ModelRenderer secHeadPart;
 
     public ModelCylinder(float scale)
     {
         super(scale, 0, 64, 64);
     
-        firstHeadPart = new RendererModel(this, 0, 32);
+        firstHeadPart = new ModelRenderer(this, 0, 32);
         firstHeadPart.addBox(-5, -8.6f, -5, 10, 1, 10);
-        firstHeadPart.setRotationPoint(0F, 0F, 0F);
+        firstHeadPart.setRotationPoint(0.0f, 0.0f, 0.0f);
         firstHeadPart.setTextureSize(64, 64);
         firstHeadPart.mirror = true;
-        setRotation(firstHeadPart, 0, 0, 0);
+        setRotation(firstHeadPart, 0.0f, 0.0f, 0.0f);
         
-        secHeadPart = new RendererModel(this, 0, 43);
+        secHeadPart = new ModelRenderer(this, 0, 43);
         secHeadPart.addBox(-3, -15.6f, -3, 6, 7, 6);
-        secHeadPart.setRotationPoint(0F, 0F, 0F);
+        secHeadPart.setRotationPoint(0.0f, 0.0f, 0.0f);
         secHeadPart.setTextureSize(64, 64);
         secHeadPart.mirror = true;
-        setRotation(secHeadPart, 0, 0, 0);
+        setRotation(secHeadPart, 0.0f, 0.0f, 0.0f);
          
         bipedHead.addChild(firstHeadPart);
         bipedHead.addChild(secHeadPart);
     }
     
     @Override
-    public void setRotationAngles(Entity entityIn, float limbSwing, float limbSwingAmount, 
-            float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor)
+    public void setRotationAngles(LivingEntity ent, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) 
     {
-        if(entityIn instanceof ArmorStandEntity)
+        if(ent instanceof ArmorStandEntity)
         {
-            ArmorStandEntity ase = (ArmorStandEntity) entityIn;
+            ArmorStandEntity ase = (ArmorStandEntity) ent;
             this.bipedHead.rotateAngleX = FACTOR * ase.getHeadRotation().getX();
             this.bipedHead.rotateAngleY = FACTOR * ase.getHeadRotation().getY();
             this.bipedHead.rotateAngleZ = FACTOR * ase.getHeadRotation().getZ();
-            this.bipedHead.setRotationPoint(0.0F, 1.0F, 0.0F);
+            this.bipedHead.setRotationPoint(0.0f, 1.0f, 0.0f);
             this.bipedBody.rotateAngleX = FACTOR * ase.getBodyRotation().getX();
             this.bipedBody.rotateAngleY = FACTOR * ase.getBodyRotation().getY();
             this.bipedBody.rotateAngleZ = FACTOR * ase.getBodyRotation().getZ();
@@ -60,21 +59,20 @@ public class ModelCylinder extends BipedModel
             this.bipedLeftLeg.rotateAngleX = FACTOR * ase.getLeftLegRotation().getX();
             this.bipedLeftLeg.rotateAngleY = FACTOR * ase.getLeftLegRotation().getY();
             this.bipedLeftLeg.rotateAngleZ = FACTOR * ase.getLeftLegRotation().getZ();
-            this.bipedLeftLeg.setRotationPoint(1.9F, 11.0F, 0.0F);
+            this.bipedLeftLeg.setRotationPoint(1.9f, 11.0f, 0.0f);
             this.bipedRightLeg.rotateAngleX = FACTOR * ase.getRightLegRotation().getX();
             this.bipedRightLeg.rotateAngleY = FACTOR * ase.getRightLegRotation().getY();
             this.bipedRightLeg.rotateAngleZ = FACTOR * ase.getRightLegRotation().getZ();
-            this.bipedRightLeg.setRotationPoint(-1.9F, 11.0F, 0.0F);
+            this.bipedRightLeg.setRotationPoint(-1.9f, 11.0f, 0.0f);
             this.bipedHeadwear.copyModelAngles(this.bipedHead);
-            return;
         }
-        super.setRotationAngles(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor);
+        super.setRotationAngles(ent, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch);
     }
-
-    private void setRotation(RendererModel model, float x, float y, float z)
+    
+    private void setRotation(ModelRenderer model, float x, float y, float z)
     {
         model.rotateAngleX = x;
         model.rotateAngleY = y;
         model.rotateAngleZ = z;
     }
-}
+}

+ 19 - 21
src/main/java/me/km/items/ModelHat.java

@@ -1,8 +1,8 @@
 package me.km.items;
 
 import net.minecraft.client.renderer.entity.model.BipedModel;
-import net.minecraft.client.renderer.entity.model.RendererModel;
-import net.minecraft.entity.Entity;
+import net.minecraft.client.renderer.model.ModelRenderer;
+import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.item.ArmorStandEntity;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
@@ -12,42 +12,41 @@ public class ModelHat extends BipedModel
 {
     private final static float FACTOR = ((float) Math.PI / 180.0f);
     
-    private final RendererModel firstHeadPart;
-    private final RendererModel secHeadPart;
+    private final ModelRenderer firstHeadPart;
+    private final ModelRenderer secHeadPart;
 
     public ModelHat(float scale)
     {
         super(scale, 0, 64, 64);
     
-        firstHeadPart = new RendererModel(this, 0, 32);
+        firstHeadPart = new ModelRenderer(this, 0, 32);
         firstHeadPart.addBox(-5, -8.6f, -5, 10, 1, 10);
-        firstHeadPart.setRotationPoint(0F, 0F, 0F);
+        firstHeadPart.setRotationPoint(0.0f, 0.0f, 0.0f);
         firstHeadPart.setTextureSize(64, 64);
         firstHeadPart.mirror = true;
-        setRotation(firstHeadPart, 0, 0, 0);
+        setRotation(firstHeadPart, 0.0f, 0.0f, 0.0f);
         
-        secHeadPart = new RendererModel(this, 0, 43);
+        secHeadPart = new ModelRenderer(this, 0, 43);
         secHeadPart.addBox(-3, -11.6f, -3, 6, 3, 6);
-        secHeadPart.setRotationPoint(0F, 0F, 0F);
+        secHeadPart.setRotationPoint(0.0f, 0.0f, 0.0f);
         secHeadPart.setTextureSize(64, 64);
         secHeadPart.mirror = true;
-        setRotation(secHeadPart, 0, 0, 0);
+        setRotation(secHeadPart, 0.0f, 0.0f, 0.0f);
          
         bipedHead.addChild(firstHeadPart);
         bipedHead.addChild(secHeadPart);
     }
     
     @Override
-    public void setRotationAngles(Entity entityIn, float limbSwing, float limbSwingAmount, 
-            float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor)
+    public void setRotationAngles(LivingEntity ent, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) 
     {
-        if(entityIn instanceof ArmorStandEntity)
+        if(ent instanceof ArmorStandEntity)
         {
-            ArmorStandEntity ase = (ArmorStandEntity) entityIn;
+            ArmorStandEntity ase = (ArmorStandEntity) ent;
             this.bipedHead.rotateAngleX = FACTOR * ase.getHeadRotation().getX();
             this.bipedHead.rotateAngleY = FACTOR * ase.getHeadRotation().getY();
             this.bipedHead.rotateAngleZ = FACTOR * ase.getHeadRotation().getZ();
-            this.bipedHead.setRotationPoint(0.0F, 1.0F, 0.0F);
+            this.bipedHead.setRotationPoint(0.0f, 1.0f, 0.0f);
             this.bipedBody.rotateAngleX = FACTOR * ase.getBodyRotation().getX();
             this.bipedBody.rotateAngleY = FACTOR * ase.getBodyRotation().getY();
             this.bipedBody.rotateAngleZ = FACTOR * ase.getBodyRotation().getZ();
@@ -60,18 +59,17 @@ public class ModelHat extends BipedModel
             this.bipedLeftLeg.rotateAngleX = FACTOR * ase.getLeftLegRotation().getX();
             this.bipedLeftLeg.rotateAngleY = FACTOR * ase.getLeftLegRotation().getY();
             this.bipedLeftLeg.rotateAngleZ = FACTOR * ase.getLeftLegRotation().getZ();
-            this.bipedLeftLeg.setRotationPoint(1.9F, 11.0F, 0.0F);
+            this.bipedLeftLeg.setRotationPoint(1.9f, 11.0f, 0.0f);
             this.bipedRightLeg.rotateAngleX = FACTOR * ase.getRightLegRotation().getX();
             this.bipedRightLeg.rotateAngleY = FACTOR * ase.getRightLegRotation().getY();
             this.bipedRightLeg.rotateAngleZ = FACTOR * ase.getRightLegRotation().getZ();
-            this.bipedRightLeg.setRotationPoint(-1.9F, 11.0F, 0.0F);
+            this.bipedRightLeg.setRotationPoint(-1.9f, 11.0f, 0.0f);
             this.bipedHeadwear.copyModelAngles(this.bipedHead);
-            return;
         }
-        super.setRotationAngles(entityIn, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor);
+        super.setRotationAngles(ent, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch);
     }
-
-    private void setRotation(RendererModel model, float x, float y, float z)
+    
+    private void setRotation(ModelRenderer model, float x, float y, float z)
     {
         model.rotateAngleX = x;
         model.rotateAngleY = y;

+ 2 - 2
src/main/java/me/km/networking/CustomInventoryScreen.java

@@ -1,6 +1,6 @@
 package me.km.networking;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.systems.RenderSystem;
 import me.km.KajetansMod;
 import me.km.inventory.CustomContainer;
 import me.km.inventory.ModInventory;
@@ -49,7 +49,7 @@ public class CustomInventoryScreen extends ContainerScreen<CustomContainer> impl
     @Override
     protected void drawGuiContainerBackgroundLayer(float partialTicks, int mouseX, int mouseY)
     {
-        GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+        RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         minecraft.getTextureManager().bindTexture(CHEST_GUI_TEXTURE);
         int i = (width - xSize) / 2;
         int j = (height - ySize) / 2;

+ 0 - 81
src/main/java/me/km/networking/DimensionSync.java

@@ -1,81 +0,0 @@
-package me.km.networking;
-
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.function.Supplier;
-import me.km.world.WorldManager;
-import net.minecraft.network.PacketBuffer;
-import net.minecraftforge.fml.network.NetworkEvent;
-
-public class DimensionSync
-{
-    private static class Data
-    {
-        private String registry;
-        private int id;
-    }
-    
-    private final ArrayList<Data> data = new ArrayList<>();
-    
-    private DimensionSync()
-    {
-    }
-    
-    public static DimensionSync create()
-    {
-        DimensionSync sync = new DimensionSync();
-        WorldManager.forEachType(type -> 
-        {
-            if(type.isVanilla())
-            {
-                return;
-            }
-            Data d = new Data();
-            d.id = type.getId() + 1;
-            d.registry = type.getRegistryName().toString();
-            sync.data.add(d);
-        });
-        return sync;
-    }
-    
-    public static void writeBytes(DimensionSync ds, PacketBuffer buffer)
-    {
-        buffer.writeInt(ds.data.size());
-        for(Data d : ds.data)
-        {
-            byte[] registry = d.registry.getBytes(StandardCharsets.UTF_8);
-            buffer.writeInt(registry.length);
-            buffer.writeBytes(registry);
-            buffer.writeInt(d.id);
-        }
-    }
-    
-    public static DimensionSync fromBytes(PacketBuffer buf)
-    {
-        DimensionSync ds = new DimensionSync();
-        int amount = buf.readInt();
-
-        for(int i = 0; i < amount; i++)
-        {
-            Data d = new Data();
-            int length = buf.readInt();
-            d.registry = buf.readBytes(length).toString(StandardCharsets.UTF_8);
-            d.id = buf.readInt();
-            ds.data.add(d);
-        }
-        return ds;
-    }
-    
-    public static void handle(DimensionSync ds, Supplier<NetworkEvent.Context> context)
-    {
-        context.get().enqueueWork(() -> 
-        {
-            WorldManager.reset();
-            for(Data d : ds.data)
-            {
-                WorldManager.registerUnsafe(d.id, d.registry);
-            }
-        });
-        context.get().setPacketHandled(true);
-    }
-}

+ 5 - 5
src/main/java/me/km/networking/ItemStackDisplayGui.java

@@ -1,6 +1,6 @@
 package me.km.networking;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.systems.RenderSystem;
 import me.km.KajetansMod;
 import me.km.utils.ClientReflectionUtils;
 import net.minecraft.client.Minecraft;
@@ -99,12 +99,12 @@ public class ItemStackDisplayGui extends AbstractGui
             return;
         }
         
-        GlStateManager.enableBlend();
-        GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+        RenderSystem.enableBlend();
+        RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         
         mc.getTextureManager().bindTexture(CUSTOM_ICONS);
         
-        int screenWidth = (mc.mainWindow.getScaledWidth() >> 1) - 91;
+        int screenWidth = (mc.getMainWindow().getScaledWidth() >> 1) - 91;
         int y = 3;
         
         if(ClientReflectionUtils.isRenderingBossBar())
@@ -125,7 +125,7 @@ public class ItemStackDisplayGui extends AbstractGui
             i++;
         }
         
-        GlStateManager.disableBlend();
+        RenderSystem.disableBlend();
         
         FontRenderer fr = mc.fontRenderer;
         i = 0;

+ 0 - 11
src/main/java/me/km/networking/ModPacketHandler.java

@@ -28,7 +28,6 @@ public class ModPacketHandler
         INSTANCE.registerMessage(id++, StatusDisplay.class, StatusDisplay::writeBytes, StatusDisplay::fromBytes, StatusDisplay::handle);
         INSTANCE.registerMessage(id++, PlayerHead.class, PlayerHead::writeBytes, PlayerHead::fromBytes, PlayerHead::handle);
         INSTANCE.registerMessage(id++, ItemStackDisplay.class, ItemStackDisplay::writeBytes, ItemStackDisplay::fromBytes, ItemStackDisplay::handle);
-        INSTANCE.registerMessage(id++, DimensionSync.class, DimensionSync::writeBytes, DimensionSync::fromBytes, DimensionSync::handle);
         INSTANCE.registerMessage(id++, PlayerLeftClickEmpty.class, PlayerLeftClickEmpty::writeBytes, PlayerLeftClickEmpty::fromBytes, PlayerLeftClickEmpty::handle);
     }
     
@@ -47,16 +46,6 @@ public class ModPacketHandler
         INSTANCE.sendToServer(msg);
     }
     
-    public static void syncDimensions(ServerPlayerEntity p)
-    {
-        sendToPlayer(p, DimensionSync.create());
-    }
-    
-    public static void syncDimensions()
-    {
-        sendToPlayers(DimensionSync.create());
-    }
-    
     public static void sendToDisplay(ServerPlayerEntity p, byte action, byte index, String text)
     {
         sendToPlayer(p, new PlayerDisplay(action, index, text));

+ 4 - 4
src/main/java/me/km/networking/PlayerDisplayGui.java

@@ -1,6 +1,6 @@
 package me.km.networking;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.systems.RenderSystem;
 import java.util.ArrayList;
 import java.util.TreeMap;
 import me.km.KajetansMod;
@@ -163,8 +163,8 @@ public class PlayerDisplayGui extends AbstractGui
     
     private int paintIcons(IconStorage is, int x, int y)
     {
-        GlStateManager.enableBlend();
-        GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+        RenderSystem.enableBlend();
+        RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         bind(CUSTOM_ICONS);
         Icon icon = is.icon;
         int width = icon.getWidth();
@@ -175,7 +175,7 @@ public class PlayerDisplayGui extends AbstractGui
         {
             blit(x + width * i - i, y, offX, offY, width, height);
         }
-        GlStateManager.disableBlend();
+        RenderSystem.disableBlend();
         return is.getWidth();
     }
 }

+ 2 - 2
src/main/java/me/km/networking/PlayerHeadGui.java

@@ -1,6 +1,6 @@
 package me.km.networking;
 
-import com.mojang.blaze3d.platform.GlStateManager;
+import com.mojang.blaze3d.systems.RenderSystem;
 import java.util.TreeMap;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.AbstractGui;
@@ -31,7 +31,7 @@ public class PlayerHeadGui extends AbstractGui
 
         public void paint(Minecraft mc)
         {
-            GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
+            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);

+ 2 - 2
src/main/java/me/km/networking/StatusDisplayGui.java

@@ -7,7 +7,7 @@ import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.AbstractGui;
 import net.minecraft.potion.EffectInstance;
 import net.minecraft.util.text.TextFormatting;
-import net.minecraft.util.text.translation.LanguageMap;
+import net.minecraft.util.text.LanguageMap;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
@@ -145,7 +145,7 @@ public class StatusDisplayGui extends AbstractGui
             maxTimeWidth = Math.max(data.getTimeWidth(), maxTimeWidth);
         }
         
-        int screenWidth = mc.mainWindow.getScaledWidth();
+        int screenWidth = mc.getMainWindow().getScaledWidth();
         
         int x = screenWidth - maxTextWidth - maxTimeWidth - 4;
         int y = 2;

+ 38 - 34
src/main/java/me/km/overrides/ModCapeLayer.java

@@ -1,10 +1,16 @@
 package me.km.overrides;
 
+import com.mojang.blaze3d.matrix.MatrixStack;
 import com.mojang.blaze3d.platform.GlStateManager;
+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;
@@ -23,54 +29,52 @@ public class ModCapeLayer extends CapeLayer
     }
 
     @Override
-    public void render(AbstractClientPlayerEntity entityIn, float p_212842_2_, float p_212842_3_, float p_212842_4_, float p_212842_5_, float p_212842_6_, float p_212842_7_, float p_212842_8_)
+    public void render(MatrixStack mStack, IRenderTypeBuffer buffer, int packedLightIn, AbstractClientPlayerEntity p, float limbSwing, float limbSwingAmount, float partialTicks, float ageInTicks, float netHeadYaw, float headPitch)
     {
-        if(entityIn.hasPlayerInfo() && !entityIn.isInvisible() && entityIn.isWearing(PlayerModelPart.CAPE))
+        if(p.hasPlayerInfo() && !p.isInvisible() && p.isWearing(PlayerModelPart.CAPE))
         {
-            ItemStack itemstack = entityIn.getItemStackFromSlot(EquipmentSlotType.CHEST);
-            if(itemstack.getItem() != Items.ELYTRA)
+            ItemStack chestStack = p.getItemStackFromSlot(EquipmentSlotType.CHEST);
+            if(chestStack.getItem() != Items.ELYTRA)
             {
-                ResourceLocation rl = PlayerCapeLoader.INSTANCE.getTexture(entityIn.getUniqueID());
+                ResourceLocation rl = PlayerCapeLoader.INSTANCE.getTexture(p.getUniqueID());
                 if(rl == null)
                 {
                     return;
                 }
                 
-                GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
-                this.bindTexture(rl);
-                GlStateManager.pushMatrix();
-                GlStateManager.translatef(0.0F, 0.0F, 0.125F);
-                double d0 = MathHelper.lerp((double) p_212842_4_, entityIn.prevChasingPosX, entityIn.chasingPosX) - MathHelper.lerp((double) p_212842_4_, entityIn.prevPosX, entityIn.posX);
-                double d1 = MathHelper.lerp((double) p_212842_4_, entityIn.prevChasingPosY, entityIn.chasingPosY) - MathHelper.lerp((double) p_212842_4_, entityIn.prevPosY, entityIn.posY);
-                double d2 = MathHelper.lerp((double) p_212842_4_, entityIn.prevChasingPosZ, entityIn.chasingPosZ) - MathHelper.lerp((double) p_212842_4_, entityIn.prevPosZ, entityIn.posZ);
-                float f = entityIn.prevRenderYawOffset + (entityIn.renderYawOffset - entityIn.prevRenderYawOffset);
-                double d3 = (double) MathHelper.sin(f * ((float) Math.PI / 180F));
-                double d4 = (double) (-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)
+                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;
+                    f2 = 0.0f;
                 }
 
-                float f4 = MathHelper.lerp(p_212842_4_, entityIn.prevCameraYaw, entityIn.cameraYaw);
-                f1 = f1 + MathHelper.sin(MathHelper.lerp(p_212842_4_, entityIn.prevDistanceWalkedModified, entityIn.distanceWalkedModified) * 6.0F) * 32.0F * f4;
-                if(entityIn.shouldRenderSneaking())
+                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;
+                    f1 += 25.0f;
                 }
 
-                GlStateManager.rotatef(6.0F + f2 / 2.0F + f1, 1.0F, 0.0F, 0.0F);
-                GlStateManager.rotatef(f3 / 2.0F, 0.0F, 0.0F, 1.0F);
-                GlStateManager.rotatef(-f3 / 2.0F, 0.0F, 1.0F, 0.0F);
-                GlStateManager.rotatef(180.0F, 0.0F, 1.0F, 0.0F);
-                this.getEntityModel().renderCape(0.0625F);
-                GlStateManager.popMatrix();
+                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();
             }
         }
     }
-}
+}

+ 5 - 5
src/main/java/me/km/overrides/ModFluidBlockRenderer.java

@@ -1,6 +1,6 @@
 package me.km.overrides;
 
-import me.km.blocks.ModBlocks;
+/*import me.km.blocks.ModBlocks;
 import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
 import net.minecraft.block.Blocks;
@@ -26,10 +26,10 @@ import net.minecraft.world.biome.BiomeColors;
 import net.minecraftforge.api.distmarker.Dist;
 import net.minecraftforge.api.distmarker.OnlyIn;
 
-@OnlyIn(Dist.CLIENT)
-public class ModFluidBlockRenderer extends FluidBlockRenderer
+@OnlyIn(Dist.CLIENT)*/
+public class ModFluidBlockRenderer //extends FluidBlockRenderer
 {
-    private final TextureAtlasSprite[] atlasSpritesLava = new TextureAtlasSprite[2];
+    /*private final TextureAtlasSprite[] atlasSpritesLava = new TextureAtlasSprite[2];
     private final TextureAtlasSprite[] atlasSpritesWater = new TextureAtlasSprite[2];
     private TextureAtlasSprite atlasSpriteWaterOverlay;
 
@@ -363,5 +363,5 @@ public class ModFluidBlockRenderer extends FluidBlockRenderer
         }
 
         return f / (float) i;
-    }
+    }*/
 }

+ 52 - 82
src/main/java/me/km/overrides/ModPlayerList.java

@@ -7,9 +7,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
-import me.hammerle.snuviscript.code.ISnuviScheduler;
 import me.km.Server;
-import me.km.networking.ModPacketHandler;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.EntityType;
@@ -50,20 +48,18 @@ import net.minecraft.world.dimension.DimensionType;
 import net.minecraft.world.storage.WorldInfo;
 import org.apache.logging.log4j.LogManager;
 
-public class ModPlayerList extends DedicatedPlayerList
+public final class ModPlayerList extends DedicatedPlayerList
 {
     private final DedicatedServer server;
     private final List<ServerPlayerEntity> players;
     private final Map<UUID, ServerPlayerEntity> uuidToPlayerMap;
-    private final ISnuviScheduler scheduler;
 
-    public ModPlayerList(DedicatedServer server, ISnuviScheduler scheduler)
+    public ModPlayerList(DedicatedServer server)
     {
         super(server);
         this.server = server;
         this.players = getPlayers();
         this.uuidToPlayerMap = ReflectionUtils.getFieldValue(Map.class, PlayerList.class, this, "field_177454_f");
-        this.scheduler = scheduler;
     }
 
     @Override
@@ -71,41 +67,16 @@ public class ModPlayerList extends DedicatedPlayerList
     {
         GameProfile profile = p.getGameProfile();
         PlayerProfileCache cache = this.server.getPlayerProfileCache();
-        GameProfile cachedProfile = cache.getProfileByUUID(profile.getId());
-        String s = cachedProfile == null ? profile.getName() : cachedProfile.getName();
         cache.addEntry(profile);
         CompoundNBT compoundnbt = this.readPlayerDataFromFile(p);
-
-        //Forge: Make sure the dimension hasn't been deleted, if so stick them in the overworld.
-        DimensionType type = p.dimension;
-        boolean noSchedule = true;
-        if(type == null || !type.isVanilla())
+        
+        ServerWorld sw = this.server.getWorld(p.dimension);
+        if (sw == null) 
         {
-            ServerWorld overWorld = this.server.getWorld(DimensionType.OVERWORLD);
             p.dimension = DimensionType.OVERWORLD;
-            if(type != null && this.server.getWorld(type) != null)
-            {
-                double x = p.posX;
-                double y = p.posY;
-                double z = p.posZ;
-                float yaw = p.rotationYaw;
-                float pitch = p.rotationPitch;
-                noSchedule = false;
-                scheduler.scheduleTask(() -> 
-                {
-                    ServerWorld ws = server.getWorld(type);
-                    if(ws != null)
-                    {
-                        p.teleport(ws, x, y, z, yaw, pitch);
-                    }       
-                    net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerLoggedIn(p);
-                }, 2);
-            }
-            WorldInfo wi = overWorld.getWorldInfo();
-            p.setPosition(wi.getSpawnX(), wi.getSpawnY(), wi.getSpawnZ());
+            sw = this.server.getWorld(p.dimension);
+            p.setPosition(sw.getWorldInfo().getSpawnX(), sw.getWorldInfo().getSpawnY(), sw.getWorldInfo().getSpawnZ());
         }
-               
-        ServerWorld sw = this.server.getWorld(p.dimension);
         p.setWorld(sw);
         p.interactionManager.setWorld((ServerWorld) p.world);
         String s1 = "local";
@@ -114,41 +85,42 @@ public class ModPlayerList extends DedicatedPlayerList
             s1 = netManager.getRemoteAddress().toString();
         }
 
-        LogManager.getLogger().info("{}[{}] logged in with entity id {} at ({}, {}, {})", p.getName().getString(), s1, p.getEntityId(), p.posX, p.posY, p.posZ);
+        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(this.server, netManager, p);
-        ModPacketHandler.syncDimensions(p);
+        ServerPlayNetHandler spnh = new ServerPlayNetHandler(server, netManager, p);
         net.minecraftforge.fml.network.NetworkHooks.sendMCRegistryPackets(netManager, "PLAY_TO_CLIENT");
-        spnh.sendPacket(new SJoinGamePacket(p.getEntityId(), p.interactionManager.getGameType(), wi.isHardcore(), sw.dimension.getType(), this.getMaxPlayers(), wi.getGenerator(), getViewDistance(), sw.getGameRules().getBoolean(GameRules.REDUCED_DEBUG_INFO)));
+        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(this.server.getRecipeManager().getRecipes()));
-        spnh.sendPacket(new STagsListPacket(this.server.getNetworkTagManager()));
+        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.posX, p.posY, p.posZ, p.rotationYaw, p.rotationPitch);
+        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)
+        for(int i = 0; i < this.players.size(); i++)
         {
-            p.connection.sendPacket(new SPlayerListItemPacket(SPlayerListItemPacket.Action.ADD_PLAYER, this.players.get(i)));
+            p.connection.sendPacket(new SPlayerListItemPacket(SPlayerListItemPacket.Action.ADD_PLAYER, players.get(i)));
         }
 
         sw.addNewPlayer(p);
-        this.server.getCustomBossEvents().onPlayerLogin(p);
-        this.sendWorldInfo(p, sw);
+        server.getCustomBossEvents().onPlayerLogin(p);
+        sendWorldInfo(p, sw);
         if(!this.server.getResourcePackUrl().isEmpty())
         {
-            p.loadResourcePack(this.server.getResourcePackUrl(), this.server.getResourcePackHash());
+            p.loadResourcePack(server.getResourcePackUrl(), server.getResourcePackHash());
         }
 
         for(EffectInstance effectinstance : p.getActivePotionEffects())
@@ -186,7 +158,7 @@ public class ModPlayerList extends DedicatedPlayerList
                 if(!p.isPassenger())
                 {
                     LogManager.getLogger().warn("Couldn't reattach entity to player");
-                    sw.removeEntity(entity1);
+                    p.removeEntity(entity1);
 
                     for(Entity entity2 : entity1.getRecursivePassengers())
                     {
@@ -197,10 +169,7 @@ public class ModPlayerList extends DedicatedPlayerList
         }
 
         p.addSelfToInternalCraftingInventory();
-        if(noSchedule)
-        {
-            net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerLoggedIn(p);
-        }
+        net.minecraftforge.fml.hooks.BasicEventHooks.firePlayerLoggedIn(p);
     }
 
     @Override
@@ -209,34 +178,34 @@ public class ModPlayerList extends DedicatedPlayerList
         UUID uuid = PlayerEntity.getUUID(profile);
         List<ServerPlayerEntity> list = Lists.newArrayList();
 
-        for(int i = 0; i < this.players.size(); ++i)
+        for(int i = 0; i < this.players.size(); i++)
         {
-            ServerPlayerEntity serverplayerentity = this.players.get(i);
-            if(serverplayerentity.getUniqueID().equals(uuid))
+            ServerPlayerEntity p = this.players.get(i);
+            if(p.getUniqueID().equals(uuid))
             {
-                list.add(serverplayerentity);
+                list.add(p);
             }
         }
 
-        ServerPlayerEntity serverplayerentity2 = this.uuidToPlayerMap.get(profile.getId());
-        if(serverplayerentity2 != null && !list.contains(serverplayerentity2))
+        ServerPlayerEntity p2 = this.uuidToPlayerMap.get(profile.getId());
+        if(p2 != null && !list.contains(p2))
         {
-            list.add(serverplayerentity2);
+            list.add(p2);
         }
 
-        for(ServerPlayerEntity serverplayerentity1 : list)
+        for(ServerPlayerEntity p : list)
         {
-            serverplayerentity1.connection.disconnect(new TranslationTextComponent("multiplayer.disconnect.duplicate_login"));
+            p.connection.disconnect(new TranslationTextComponent("multiplayer.disconnect.duplicate_login"));
         }
 
         PlayerInteractionManager playerinteractionmanager;
-        if(this.server.isDemo())
+        if(server.isDemo())
         {
-            playerinteractionmanager = new DemoPlayerInteractionManager(this.server.getWorld(DimensionType.OVERWORLD));
+            playerinteractionmanager = new DemoPlayerInteractionManager(server.getWorld(DimensionType.OVERWORLD));
         }
         else
         {
-            playerinteractionmanager = new PlayerInteractionManager(this.server.getWorld(DimensionType.OVERWORLD));
+            playerinteractionmanager = new PlayerInteractionManager(server.getWorld(DimensionType.OVERWORLD));
         }
 
         return new ModEntityPlayerMP(this.server, this.server.getWorld(DimensionType.OVERWORLD), profile, playerinteractionmanager);
@@ -259,7 +228,7 @@ public class ModPlayerList extends DedicatedPlayerList
         {
             dim = DimensionType.OVERWORLD;
         }
-
+        
         this.removePlayer(pIn);
         pIn.getServerWorld().removePlayer(pIn, true); // Forge: keep data until copyFrom called
         BlockPos blockpos = pIn.getBedLocation(dim);
@@ -288,38 +257,39 @@ public class ModPlayerList extends DedicatedPlayerList
             p.addTag(s);
         }
 
-        ServerWorld serverworld = this.server.getWorld(pIn.dimension);
-        this.setPlayerGameTypeBasedOnOther(p, pIn, serverworld);
+        ServerWorld sw = this.server.getWorld(pIn.dimension);
+        setPlayerGameTypeBasedOnOther(p, pIn, sw);
         if(blockpos != null)
         {
-            Optional<Vec3d> optional = PlayerEntity.func_213822_a(this.server.getWorld(pIn.dimension), blockpos, flag);
+            Optional<Vec3d> optional = PlayerEntity.func_213822_a(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, dim);
+                p.setLocationAndAngles(vec3d.x, vec3d.y, vec3d.z, 0.0f, 0.0f);
+                p.setSpawnPoint(blockpos, flag, false, dim);
             }
             else
             {
-                p.connection.sendPacket(new SChangeGameStatePacket(0, 0.0F));
+                p.connection.sendPacket(new SChangeGameStatePacket(0, 0.0f));
             }
         }
 
-        //while(!serverworld.areCollisionShapesEmpty(p) && p.posY < 256.0D)
-        //{
-        //    p.setPosition(p.posX, p.posY + 1.0D, p.posZ);
-        //}
+        while(!sw.func_226669_j_(p) && p.getPosY() < 256.0D) 
+        {
+            p.setPosition(p.getPosX(), p.getPosY() + 1.0, p.getPosZ());
+        }
 
         WorldInfo wi = p.world.getWorldInfo();
-        p.connection.sendPacket(new SRespawnPacket(p.dimension, wi.getGenerator(), p.interactionManager.getGameType()));
-        BlockPos pos = serverworld.getSpawnPoint();
-        p.connection.setPlayerLocation(p.posX, p.posY, p.posZ, p.rotationYaw, p.rotationPitch);
+        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();
+        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 SSetExperiencePacket(p.experience, p.experienceTotal, p.experienceLevel));
-        this.sendWorldInfo(p, serverworld);
-        this.updatePermissionLevel(p);
-        serverworld.addRespawnedPlayer(p);
+        sendWorldInfo(p, sw);
+        updatePermissionLevel(p);
+        sw.addRespawnedPlayer(p);
         this.addPlayer(p);
         this.uuidToPlayerMap.put(p.getUniqueID(), p);
         p.addSelfToInternalCraftingInventory();

+ 5 - 21
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -470,7 +470,7 @@ public class MinecraftFunctions
         sm.registerFunction("player.setspawn", (sc, in) -> 
         {     
             Location l = (Location) in[1].get(sc);
-            ((ServerPlayerEntity) in[0].get(sc)).setSpawnPoint(l.getBlockPos(), true, l.getWorld().getDimension().getType());
+            ((ServerPlayerEntity) in[0].get(sc)).setSpawnPoint(l.getBlockPos(), true, false, l.getWorld().getDimension().getType());
             return Void.TYPE; 
         });
         sm.registerAlias("player.setspawn", "player.setbedspawn");
@@ -570,24 +570,8 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------
         
         sm.registerAlias("players.toworldlist", "world.getplayers");
-        sm.registerFunction("world.register", (sc, in) -> 
-        {
-            boolean b = WorldManager.register(in[0].getString(sc));
-            if(b)
-            {
-                ModPacketHandler.syncDimensions();
-            }
-            return b;
-        });
-        sm.registerFunction("world.unregister", (sc, in) -> 
-        {
-            boolean b = WorldManager.unregister(server, in[0].getString(sc));
-            if(b)
-            {
-                ModPacketHandler.syncDimensions();
-            }
-            return b;
-        });
+        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) -> 
         {     
             return WorldManager.get(server, in[0].getString(sc));
@@ -1318,7 +1302,7 @@ public class MinecraftFunctions
                 p.stopRiding();
                 if(p.isSleeping())
                 {
-                    p.wakeUpPlayer(true, true, false);
+                    p.func_225652_a_(true, true);
                 }
 
                 float yaw = l.getYaw() != 0.0f ? l.getYaw() : ent.rotationYaw;
@@ -2163,7 +2147,7 @@ public class MinecraftFunctions
             float volume = in.length >= 4 ? in[3].getFloat(sc) : 1.0f;
             float pitch = in.length >= 5 ? in[4].getFloat(sc) : (p.world.rand.nextFloat() * 0.1f + 0.9f);
             p.connection.sendPacket(new SPlaySoundEffectPacket((SoundEvent) in[1].get(sc), 
-                    (SoundCategory) in[2].get(sc), p.posX, p.posY, p.posZ, volume, pitch));
+                    (SoundCategory) in[2].get(sc), p.getPosX(), p.getPosY(), p.getPosZ(), volume, pitch));
             return Void.TYPE; 
         });
 

+ 2 - 3
src/main/java/me/km/utils/ClientReflectionUtils.java

@@ -1,7 +1,6 @@
 package me.km.utils;
 
 import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Map;
 import me.km.overrides.ModFluidBlockRenderer;
@@ -24,10 +23,10 @@ import org.apache.logging.log4j.LogManager;
 @OnlyIn(Dist.CLIENT)
 public class ClientReflectionUtils
 {
-    private final static Method CAN_RENDER_NAME = getMethod(LivingRenderer.class, "func_177070_b", LivingEntity.class);
+    private final static Method CAN_RENDER_NAME = getMethod(EntityRenderer.class, "func_177070_b", Entity.class);
     private final static Method RENDER_ENTITY_NAME = getMethod(EntityRenderer.class, "func_188296_a", Entity.class, double.class, double.class, double.class, String.class, double.class);
     
-    public static boolean canRenderName(LivingRenderer lr, LivingEntity liv)
+    public static boolean canRenderName(EntityRenderer lr, Entity liv)
     {
         try
         {

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

@@ -226,7 +226,7 @@ public class ItemStackUtils
     {
         CompoundNBT com = stack.getOrCreateChildTag("display");
         ListNBT nbtList = new ListNBT();
-        list.forEach(s -> nbtList.add(new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s.toString())))));
+        list.forEach(s -> nbtList.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(new StringTextComponent(s.toString())))));
         com.put("Lore", nbtList);
     }
     
@@ -234,7 +234,7 @@ public class ItemStackUtils
     {
         CompoundNBT com = stack.getOrCreateChildTag("display");
         ListNBT nbtList = com.getList("Lore", 8);
-        nbtList.add(new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
+        nbtList.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
         com.put("Lore", nbtList);
     }
     
@@ -256,11 +256,11 @@ public class ItemStackUtils
         ListNBT list = com.getList("Lore", 8);                  
         if(i >= list.size())
         {
-            list.add(new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
+            list.add(StringNBT.valueOf(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
         }
         else
         {
-            list.set(i, new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
+            list.set(i, StringNBT.valueOf(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
         }           
         com.put("Lore", list);
     }

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

@@ -52,7 +52,7 @@ public class Location
     
     public Location(Entity ent)
     {
-        this(ent.world, ent.posX, ent.posY, ent.posZ, ent.rotationYaw, ent.rotationPitch);
+        this(ent.world, ent.getPosX(), ent.getPosY(), ent.getPosZ(), ent.rotationYaw, ent.rotationPitch);
     }
     
     public Location(MinecraftServer server, String location)

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

@@ -86,14 +86,14 @@ public class Utils
     public static List<PlayerEntity> getPlayers(Entity not, double radius)
     {       
         double sqareRadius = radius * radius;
-        return not.world.getEntitiesWithinAABB(PlayerEntity.class, buildBoxAround(not.posX, not.posY, not.posZ, radius), 
+        return not.world.getEntitiesWithinAABB(PlayerEntity.class, buildBoxAround(not.getPosX(), not.getPosY(), not.getPosZ(), radius), 
                 p -> p != not && p.getDistanceSq(not) <= sqareRadius);
     }
     
     public static List<LivingEntity> getLiving(Entity not, double radius)
     {       
         double sqareRadius = radius * radius;
-        return not.world.getEntitiesWithinAABB(LivingEntity.class, buildBoxAround(not.posX, not.posY, not.posZ, radius), 
+        return not.world.getEntitiesWithinAABB(LivingEntity.class, buildBoxAround(not.getPosX(), not.getPosY(), not.getPosZ(), radius), 
                 p -> p != not && p.getDistanceSq(not) <= sqareRadius);
     }
 

+ 12 - 12
src/main/java/me/km/world/ModWorldGeneration.java

@@ -1,6 +1,7 @@
 package me.km.world;
 
 import me.km.blocks.ModBlocks;
+import net.minecraft.block.Block;
 import net.minecraft.block.Blocks;
 import net.minecraft.world.biome.Biome;
 import net.minecraft.world.gen.GenerationStage;
@@ -40,6 +41,14 @@ public class ModWorldGeneration
         }
     }
     
+    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))));
+    }
+    
     private static void addFeatures(Biome biome)
     {
         //          | max   | bottom | top    | max  | spawn |
@@ -55,17 +64,8 @@ public class ModWorldGeneration
         // tin      |     6 |      0 |      0 |   96 |    12 |
         // silver   |     9 |      0 |      0 |   64 |     3 |
         
-        biome.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Biome.createDecoratedFeature(
-                        Feature.ORE, new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE, 
-                                ModBlocks.copperOre.getDefaultState(), 9), Placement.COUNT_RANGE, 
-                        new CountRangeConfig(25, 0, 0, 128)));
-        biome.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Biome.createDecoratedFeature(
-                        Feature.ORE, new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE, 
-                                ModBlocks.tinOre.getDefaultState(), 6), Placement.COUNT_RANGE, 
-                        new CountRangeConfig(12, 0, 0, 96)));
-        biome.addFeature(GenerationStage.Decoration.UNDERGROUND_ORES, Biome.createDecoratedFeature(
-                        Feature.ORE, new OreFeatureConfig(OreFeatureConfig.FillerBlockType.NATURAL_STONE, 
-                                ModBlocks.silverOre.getDefaultState(), 9), Placement.COUNT_RANGE, 
-                        new CountRangeConfig(3, 0, 0, 64)));
+        addOre(biome, ModBlocks.copperOre, 9, 25, 128);
+        addOre(biome, ModBlocks.tinOre, 6, 12, 96);
+        addOre(biome, ModBlocks.silverOre, 9, 3, 64);
     }
 }

+ 1 - 25
src/main/java/me/km/world/WorldManager.java

@@ -1,7 +1,6 @@
 package me.km.world;
 
 import java.util.ArrayList;
-import java.util.function.Consumer;
 import me.km.KajetansMod;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.server.MinecraftServer;
@@ -20,21 +19,7 @@ public class WorldManager
     // -------------------------------------------------------------------------
     // unsafe stuff
     // -------------------------------------------------------------------------
-    
-    public static void registerUnsafe(int id, String name)
-    {
-        DimensionManager.registerDimensionInternal(id, new ResourceLocation(name), MOD_DIMENSION, null, true);
-    }
-    
-    public static void reset()
-    {
-        ClearableRegistry<DimensionType> reg = (ClearableRegistry<DimensionType>) DimensionManager.getRegistry();
-        reg.clear();
-        reg.register(DimensionType.OVERWORLD.getId() + 1, new ResourceLocation("minecraft", "overworld"), DimensionType.OVERWORLD);
-        reg.register(DimensionType.THE_NETHER.getId() + 1, new ResourceLocation("minecraft", "the_nether"), DimensionType.THE_NETHER);
-        reg.register(DimensionType.THE_END.getId() + 1, new ResourceLocation("minecraft", "the_end"), DimensionType.THE_END);
-    }
-    
+
     private static ResourceLocation getRegistry(DimensionType type)
     {
         ResourceLocation rl = type.getRegistryName();
@@ -51,15 +36,6 @@ public class WorldManager
         return rl;
     }
     
-    public static void forEachType(Consumer<DimensionType> c)
-    {
-        DimensionManager.getRegistry().iterator().forEachRemaining((type) -> 
-        {
-            getRegistry(type);
-            c.accept(type);
-        });
-    }
-    
     private static DimensionType getType(ResourceLocation rl)
     {
         return DimensionManager.getRegistry().getOrDefault(rl);

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

@@ -1,5 +1,5 @@
 modLoader="javafml"
-loaderVersion="[28,)"
+loaderVersion="[31,)"
 [[mods]]
 modId="km"
 version="0.0.41"
@@ -8,4 +8,4 @@ credits="kajetanjohannes"
 authors="kajetanjohannes"
 description='''
 Kajetans Mod for Mundus Crassus
-'''
+'''

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

@@ -1,7 +1,7 @@
 {
     "pack": {
         "description": "km resources",
-        "pack_format": 4,
-        "_comment": "A pack_format of 4 requires json lang files. Note: we require v4 pack meta for all mods."
+        "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."
     }
 }