Browse Source

Update for Minecraft 1.12, fixes to have no need for SnuviScript in Client

Kajetan Johannes Hammerle 6 years ago
parent
commit
f221ec8d80
44 changed files with 742 additions and 612 deletions
  1. 5 6
      build.gradle
  2. 26 26
      gradlew
  3. 0 90
      gradlew.bat
  4. 10 17
      src/main/java/me/km/KajetansMod.java
  5. 38 0
      src/main/java/me/km/ObjectRegistry.java
  6. 1 1
      src/main/java/me/km/api/Location.java
  7. 3 3
      src/main/java/me/km/api/SimpleConfig.java
  8. 38 40
      src/main/java/me/km/api/Utils.java
  9. 3 2
      src/main/java/me/km/blocks/BlockBase.java
  10. 18 18
      src/main/java/me/km/blocks/BlockEvents.java
  11. 5 5
      src/main/java/me/km/blocks/BlockSpikeTrap.java
  12. 2 2
      src/main/java/me/km/blocks/BlockTrap.java
  13. 10 1
      src/main/java/me/km/blocks/EnumMetals.java
  14. 63 34
      src/main/java/me/km/blocks/ModBlocks.java
  15. 2 1
      src/main/java/me/km/commands/CommandBan.java
  16. 2 1
      src/main/java/me/km/commands/CommandKick.java
  17. 2 1
      src/main/java/me/km/commands/CommandTempBan.java
  18. 1 1
      src/main/java/me/km/commands/CommandTop.java
  19. 1 1
      src/main/java/me/km/commands/CommandTpPos.java
  20. 3 4
      src/main/java/me/km/dimensions/ModWorldGeneration.java
  21. 9 9
      src/main/java/me/km/effects/EffectUtils.java
  22. 2 2
      src/main/java/me/km/effects/active/Doomed.java
  23. 1 1
      src/main/java/me/km/effects/active/Flying.java
  24. 3 3
      src/main/java/me/km/effects/active/Jump.java
  25. 1 1
      src/main/java/me/km/effects/active/Kick.java
  26. 1 1
      src/main/java/me/km/effects/active/Pull.java
  27. 1 1
      src/main/java/me/km/effects/active/Push.java
  28. 1 1
      src/main/java/me/km/effects/passive/ArrowEffects.java
  29. 1 1
      src/main/java/me/km/effects/passive/EntityDamageEffects.java
  30. 2 2
      src/main/java/me/km/effects/passive/EntityDrop.java
  31. 1 1
      src/main/java/me/km/effects/passive/ThrowableEffects.java
  32. 1 1
      src/main/java/me/km/entities/EntityItemProjectile.java
  33. 80 75
      src/main/java/me/km/items/ModItems.java
  34. 0 216
      src/main/java/me/km/items/ModRecipes.java
  35. 5 4
      src/main/java/me/km/nms/NmsUtilities.java
  36. 12 12
      src/main/java/me/km/playerbank/ModDedicatedPlayerList.java
  37. 1 2
      src/main/java/me/km/playerbank/PvpEvent.java
  38. 1 2
      src/main/java/me/km/plots/ProtectionEntity.java
  39. 347 0
      src/main/java/me/km/recipes/ModRecipes.java
  40. 3 0
      src/main/java/me/km/scheduler/SnuviScheduler.java
  41. 28 15
      src/main/java/me/km/snuviscript/MinecraftFunctions.java
  42. 3 3
      src/main/java/me/km/snuviscript/ScriptEvents.java
  43. 1 1
      src/main/java/me/km/utils/ItemStackUtils.java
  44. 4 4
      src/main/java/me/km/utils/RecipeUtils.java

+ 5 - 6
build.gradle

@@ -4,7 +4,7 @@ buildscript {
         maven { url = "http://files.minecraftforge.net/maven" }
     }
     dependencies {
-        classpath 'net.minecraftforge.gradle:ForgeGradle:2.2-SNAPSHOT'
+        classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT'
         classpath 'mysql:mysql-connector-java:5.1.42'
     }
 }
@@ -16,13 +16,13 @@ version = "1.0"
 group = "me.hammerle.km" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
 archivesBaseName = "km"
 
-sourceCompatibility = targetCompatibility = "1.8" // Need this here so eclipse task generates correctly.
+sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
 compileJava {
-    sourceCompatibility = targetCompatibility = "1.8"
+    sourceCompatibility = targetCompatibility = '1.8'
 }
 
 minecraft {
-    version = "1.11.2-13.20.0.2303"
+    version = "1.12-14.21.1.2387"
     runDir = "run"
     
     // the mappings can be changed at any time, and must be in the following format.
@@ -30,7 +30,7 @@ minecraft {
     // stable_#            stables are built at the discretion of the MCP team.
     // Use non-default mappings at your own risk. they may not always work.
     // simply re-run your setup task after changing the mappings to update your workspace.
-    mappings = "snapshot_20170525"
+    mappings = "snapshot_20170624"
     // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable.
 }
 
@@ -55,7 +55,6 @@ dependencies {
     // for more info...
     // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
     // http://www.gradle.org/docs/current/userguide/dependency_management.html
-    
     compile 'mysql:mysql-connector-java:5.1.42'
     compile files('./../../SnuviScript/dist/SnuviScript.jar')
 }

+ 26 - 26
gradlew

@@ -6,30 +6,12 @@
 ##
 ##############################################################################
 
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-        PRG="$link"
-    else
-        PRG=`dirname "$PRG"`"/$link"
-    fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
 
 APP_NAME="Gradle"
 APP_BASE_NAME=`basename "$0"`
 
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
-
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD="maximum"
 
@@ -48,7 +30,6 @@ die ( ) {
 cygwin=false
 msys=false
 darwin=false
-nonstop=false
 case "`uname`" in
   CYGWIN* )
     cygwin=true
@@ -59,11 +40,31 @@ case "`uname`" in
   MINGW* )
     msys=true
     ;;
-  NONSTOP* )
-    nonstop=true
-    ;;
 esac
 
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
 CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 
 # Determine the Java command to use to start the JVM.
@@ -89,7 +90,7 @@ location of your Java installation."
 fi
 
 # Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
     MAX_FD_LIMIT=`ulimit -H -n`
     if [ $? -eq 0 ] ; then
         if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -113,7 +114,6 @@ fi
 if $cygwin ; then
     APP_HOME=`cygpath --path --mixed "$APP_HOME"`
     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
-    JAVACMD=`cygpath --unix "$JAVACMD"`
 
     # We build the pattern for arguments to be converted via cygpath
     ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`

+ 0 - 90
gradlew.bat

@@ -1,90 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem
-@rem  Gradle startup script for Windows
-@rem
-@rem ##########################################################################
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
-set APP_BASE_NAME=%~n0
-set APP_HOME=%DIRNAME%
-
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
-@rem Find java.exe
-if defined JAVA_HOME goto findJavaFromJavaHome
-
-set JAVA_EXE=java.exe
-%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
-
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:findJavaFromJavaHome
-set JAVA_HOME=%JAVA_HOME:"=%
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-
-if exist "%JAVA_EXE%" goto init
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-
-goto fail
-
-:init
-@rem Get command-line arguments, handling Windows variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
-
-@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
-
-:fail
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
-rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
-
-:mainEnd
-if "%OS%"=="Windows_NT" endlocal
-
-:omega

+ 10 - 17
src/main/java/me/km/KajetansMod.java

@@ -5,7 +5,6 @@ import me.km.api.SimpleConfig;
 import me.km.api.CommandOverloader;
 import me.km.blockprotections.BlockProtectionBank;
 import me.km.blocks.BlockEvents;
-import me.km.blocks.ModBlocks;
 import me.km.chatmanager.ChatManager;
 import me.km.databank.DataBank;
 import me.km.dimensions.ModWorldGeneration;
@@ -13,8 +12,6 @@ import me.km.dimensions.WorldData;
 import me.km.effects.EffectUtils;
 import me.km.events.CustomEventCaller;
 import me.km.fluids.ModFluids;
-import me.km.items.ModItems;
-import me.km.items.ModRecipes;
 import me.km.jobsystem.JobAPI;
 import me.km.permissions.PermissionManager;
 import me.km.playerbank.PlayerBank;
@@ -38,6 +35,8 @@ import net.minecraftforge.fml.common.event.FMLServerAboutToStartEvent;
 import net.minecraftforge.fml.common.event.FMLServerStoppingEvent;
 import net.minecraftforge.fml.common.event.FMLServerStartedEvent;
 import net.minecraftforge.fml.common.registry.GameRegistry;
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
 
 @Mod(modid = KajetansMod.MODID, version = KajetansMod.VERSION, name = KajetansMod.NAME)
 public class KajetansMod
@@ -46,6 +45,7 @@ public class KajetansMod
     
     public static Module error;
     public static DataBank databank;
+    @SideOnly(Side.SERVER)
     public static SnuviScheduler scheduler;
     public static PlayerManager playerbank;
     public static Module generalCommands;
@@ -69,7 +69,7 @@ public class KajetansMod
 
     public static final String MODID = "km";
     public static final String NAME = "Kajetans Mod";
-    public static final String VERSION = "0.0.6";
+    public static final String VERSION = "0.0.7";
 
     @Mod.Instance(MODID)
     public static KajetansMod instance;
@@ -85,13 +85,10 @@ public class KajetansMod
     }
     
     @Mod.EventHandler
-    public void preInit(FMLPreInitializationEvent event) 
+    public void preInit(FMLPreInitializationEvent e) 
     {
         System.out.println(NAME + " is loading!");
         ModFluids.init();
-        ModItems.init();
-        ModBlocks.init();
-        ModBlocks.lateInit();
         GameRegistry.registerWorldGenerator(new ModWorldGeneration(), 3);
     }
     
@@ -102,7 +99,6 @@ public class KajetansMod
         MinecraftForge.EVENT_BUS.register(new ClientEvents());
         MinecraftForge.EVENT_BUS.register(new BlockEvents());
         MinecraftForge.EVENT_BUS.register(new CustomEventCaller());
-        ModRecipes.init();
     }
     
     @Mod.EventHandler
@@ -146,14 +142,11 @@ public class KajetansMod
             {
                 return;
             }
-        }
-        
-        // Scheduler
-        scheduler = new SnuviScheduler("Scheduler", "Scheduler", TextFormatting.GREEN);
-        scheduler.registerEvents("me.km.scheduler");
-
-        if(!singlePlayer)
-        {
+            
+            // Scheduler
+            scheduler = new SnuviScheduler("Scheduler", "Scheduler", TextFormatting.GREEN);
+            scheduler.registerEvents("me.km.scheduler");
+            
             // Spielerdatenbank
             playerbank = new PlayerManager("PlayerBank", "PlayerBank", TextFormatting.RED);
             playerbank.setDataBank(new PlayerBank(playerbank, databank.getConnection()));

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

@@ -0,0 +1,38 @@
+package me.km;
+
+import me.km.blocks.ModBlocks;
+import me.km.items.ModItems;
+import me.km.recipes.ModRecipes;
+import net.minecraft.block.Block;
+import net.minecraft.item.Item;
+import net.minecraft.item.crafting.IRecipe;
+import net.minecraftforge.event.RegistryEvent;
+import net.minecraftforge.fml.common.Mod;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+@Mod.EventBusSubscriber
+public class ObjectRegistry 
+{
+    @SubscribeEvent
+    public static void onBlockRegistry(RegistryEvent.Register<Block> e) 
+    {
+        System.out.println(1);
+        ModBlocks.initBlocks(e.getRegistry());
+        ModBlocks.initReplacementBlocks(e.getRegistry());
+    }
+    
+    @SubscribeEvent
+    public static void onItemRegistry(RegistryEvent.Register<Item> e) 
+    {
+        System.out.println(2);
+        ModBlocks.initItemBlocks(e.getRegistry());
+        ModItems.init(e.getRegistry());
+    }
+    
+    @SubscribeEvent
+    public static void onRecipeRegistry(RegistryEvent.Register<IRecipe> e) 
+    {
+        System.out.println(3);
+        ModRecipes.init(e.getRegistry());
+    }
+}

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

@@ -33,7 +33,7 @@ public class Location
     
     public Location(World w, Vec3d pos, float yaw, float pitch)
     {
-        this(w, pos.xCoord, pos.yCoord, pos.zCoord, yaw, pitch);
+        this(w, pos.x, pos.y, pos.z, yaw, pitch);
     }
     
     public Location(World w, Vec3d pos)

+ 3 - 3
src/main/java/me/km/api/SimpleConfig.java

@@ -238,9 +238,9 @@ public class SimpleConfig
     public void setLocation(String key, Location l)
     {
         setString(key + ".world", l.getWorld().getWorldInfo().getWorldName());
-        setDouble(key + ".x", l.getPos().xCoord);
-        setDouble(key + ".y", l.getPos().yCoord);
-        setDouble(key + ".z", l.getPos().zCoord);
+        setDouble(key + ".x", l.getX());
+        setDouble(key + ".y", l.getY());
+        setDouble(key + ".z", l.getZ());
         setDouble(key + ".yaw", l.getYaw());
         setDouble(key + ".pitch", l.getPitch());
     }

+ 38 - 40
src/main/java/me/km/api/Utils.java

@@ -378,7 +378,7 @@ public class Utils
     
     public static EntityPlayer getDamager(DamageSource ds)
     {
-        Entity ent = ds.getSourceOfDamage();
+        Entity ent = ds.getTrueSource();
         if(ent == null)
         {
             return null;
@@ -387,7 +387,7 @@ public class Utils
         {
             return (EntityPlayer) ent;
         }
-        return getPlayerFromProjectile(ent);
+        return null;//getPlayerFromProjectile(ent);
     }
 
     // -------------------------------------------------------------------------
@@ -406,8 +406,6 @@ public class Utils
     
     public static void teleportEntity(Entity ent, Location l)
     {
-        Vec3d pos = l.getPos();
-
         int dim = l.getWorld().provider.getDimension();
         if(ent instanceof EntityPlayerMP)
         {
@@ -415,31 +413,31 @@ public class Utils
             KajetansMod.playerbank.saveLocation(p);
             if(ent.dimension != dim)
             {
-                KajetansMod.server.getPlayerList().transferPlayerToDimension(p, dim, new ModTeleporter(KajetansMod.server.worldServerForDimension(dim)));
+                KajetansMod.server.getPlayerList().transferPlayerToDimension(p, dim, new ModTeleporter(KajetansMod.server.getWorld(dim)));
             }
             if(l.getYaw() != 0 || l.getPitch() != 0)
             {
-                p.connection.setPlayerLocation(pos.xCoord, pos.yCoord, pos.zCoord, l.getYaw(), l.getPitch());
+                p.connection.setPlayerLocation(l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch());
             }
             else
             {
-                p.connection.setPlayerLocation(pos.xCoord, pos.yCoord, pos.zCoord, ent.rotationYaw, ent.rotationPitch);
+                p.connection.setPlayerLocation(l.getX(), l.getY(), l.getZ(), ent.rotationYaw, ent.rotationPitch);
             }
         }
         else
         {
             if(ent.dimension != dim)
             {
-                WorldServer n = KajetansMod.server.worldServerForDimension(dim);
-                KajetansMod.server.getPlayerList().transferEntityToWorld(ent, ent.dimension, KajetansMod.server.worldServerForDimension(ent.dimension), n, new ModTeleporter(n));
+                WorldServer n = KajetansMod.server.getWorld(dim);
+                KajetansMod.server.getPlayerList().transferEntityToWorld(ent, ent.dimension, KajetansMod.server.getWorld(ent.dimension), n, new ModTeleporter(n));
             }
             if(l.getYaw() != 0 && l.getPitch() != 0)
             {
-                ent.setLocationAndAngles(pos.xCoord, pos.yCoord, pos.zCoord, l.getYaw(), l.getPitch());
+                ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch());
             }
             else
             {
-                ent.setLocationAndAngles(pos.xCoord, pos.yCoord, pos.zCoord, ent.rotationYaw, ent.rotationPitch);
+                ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), ent.rotationYaw, ent.rotationPitch);
             }
         }
     }
@@ -456,7 +454,7 @@ public class Utils
     @SuppressWarnings("unchecked")
     public static List<Entity> getEntitiesExcluding(Entity ent, World w, BlockPos pos, BlockPos pos2)
     {       
-        return w.getEntitiesWithinAABBExcludingEntity(ent, new AxisAlignedBB(pos, pos2).expandXyz(1));
+        return w.getEntitiesWithinAABBExcludingEntity(ent, new AxisAlignedBB(pos, pos2).grow(1));
     }
     
     @SuppressWarnings("unchecked")
@@ -464,8 +462,8 @@ public class Utils
     {       
         double sqareRadius = radius * radius;
         return w.getEntitiesWithinAABB(type, new AxisAlignedBB(
-                v.xCoord - radius, v.yCoord - radius, v.zCoord - radius, 
-                v.xCoord + radius, v.yCoord + radius, v.zCoord + radius), ent -> ent.getDistanceSq(v.xCoord, v.yCoord, v.zCoord) <= sqareRadius);
+                v.x - radius, v.y - radius, v.z - radius, 
+                v.x + radius, v.y + radius, v.z + radius), ent -> ent.getDistanceSq(v.x, v.y, v.z) <= sqareRadius);
     }
     
     public static List<EntityPlayer> getNearbyPlayers(World w, double x, double y, double z, double radius)
@@ -476,14 +474,14 @@ public class Utils
     
     public static List<EntityPlayer> getNearbyPlayers(World w, Vec3d v, double radius)
     {       
-        return getNearbyPlayers(w, v.xCoord, v.yCoord, v.zCoord, radius);
+        return getNearbyPlayers(w, v.x, v.y, v.z, radius);
     }
 
     public static <T extends Entity> T getNearestEntity(World w, Vec3d v, double radius, Class<T> type)
     {
         return getNearbyEntities(w, v, radius, type).stream().min((e1, e2) -> Double.compare(
-                        e1.getDistanceSq(v.xCoord, v.yCoord, v.zCoord), 
-                        e2.getDistanceSq(v.xCoord, v.yCoord, v.zCoord)))
+                        e1.getDistanceSq(v.x, v.y, v.z), 
+                        e2.getDistanceSq(v.x, v.y, v.z)))
                 .orElse(null);
     }
     
@@ -491,49 +489,49 @@ public class Utils
     {
         double lowerX = Double.NEGATIVE_INFINITY;
         double upperX = Double.POSITIVE_INFINITY;
-        if(unit.xCoord != 0)
+        if(unit.x != 0)
         {
-            if(unit.xCoord > 0)
+            if(unit.x > 0)
             {
-                lowerX = (bound.minX - start.xCoord) / unit.xCoord;
-                upperX = (bound.maxX - start.xCoord) / unit.xCoord;
+                lowerX = (bound.minX - start.x) / unit.x;
+                upperX = (bound.maxX - start.x) / unit.x;
             }
             else
             {
-                lowerX = (bound.maxX - start.xCoord) / unit.xCoord;
-                upperX = (bound.minX - start.xCoord) / unit.xCoord;
+                lowerX = (bound.maxX - start.x) / unit.x;
+                upperX = (bound.minX - start.x) / unit.x;
             }
         }
         
         double lowerY = Double.NEGATIVE_INFINITY;
         double upperY = Double.POSITIVE_INFINITY;
-        if(unit.yCoord != 0)
+        if(unit.y != 0)
         {
-            if(unit.yCoord > 0)
+            if(unit.y > 0)
             {
-                lowerY = (bound.minY - start.yCoord) / unit.yCoord;
-                upperY = (bound.maxY - start.yCoord) / unit.yCoord;
+                lowerY = (bound.minY - start.y) / unit.y;
+                upperY = (bound.maxY - start.y) / unit.y;
             }
             else
             {
-                lowerY = (bound.maxY - start.yCoord) / unit.yCoord;
-                upperY = (bound.minY - start.yCoord) / unit.yCoord;
+                lowerY = (bound.maxY - start.y) / unit.y;
+                upperY = (bound.minY - start.y) / unit.y;
             }
         }
         
         double lowerZ = Double.NEGATIVE_INFINITY;
         double upperZ = Double.POSITIVE_INFINITY;
-        if(unit.zCoord != 0)
+        if(unit.z != 0)
         {
-            if(unit.zCoord > 0)
+            if(unit.z > 0)
             {
-                lowerZ = (bound.minZ - start.zCoord) / unit.zCoord;
-                upperZ = (bound.maxZ - start.zCoord) / unit.zCoord;
+                lowerZ = (bound.minZ - start.z) / unit.z;
+                upperZ = (bound.maxZ - start.z) / unit.z;
             }
             else
             {
-                lowerZ = (bound.maxZ - start.zCoord) / unit.zCoord;
-                upperZ = (bound.minZ - start.zCoord) / unit.zCoord;
+                lowerZ = (bound.maxZ - start.z) / unit.z;
+                upperZ = (bound.minZ - start.z) / unit.z;
             }
         }
 
@@ -546,16 +544,16 @@ public class Utils
         World w = p.getEntityWorld();
         BlockPos l = getPlayerTarget(p, radius);
         Vec3d eye = getEyeLocation(p);
-        Vec3d unit = new Vec3d(l.getX() - eye.xCoord, l.getY() - eye.yCoord, l.getZ() - eye.zCoord);
+        Vec3d unit = new Vec3d(l.getX() - eye.x, l.getY() - eye.y, l.getZ() - eye.z);
         
         List<Entity> col = getEntitiesExcluding(p, w, new BlockPos(eye), l);
         col.removeIf(ent -> !type.isAssignableFrom(ent.getClass()));
         // Entfernt Entities, die sich nicht mit dem Blick-Vektor schneiden
-        col.removeIf(ent -> !doesIntersect(ent.getEntityBoundingBox().expandXyz(0.1), eye, unit));
+        col.removeIf(ent -> !doesIntersect(ent.getEntityBoundingBox().grow(0.1), eye, unit));
 
         return (T) col.stream().sorted((Entity e1, Entity e2) -> 
         {
-            return Double.compare(e1.getDistanceSq(eye.xCoord, eye.yCoord, eye.zCoord), e2.getDistanceSq(eye.xCoord, eye.yCoord, eye.zCoord));
+            return Double.compare(e1.getDistanceSq(eye.x, eye.y, eye.z), e2.getDistanceSq(eye.x, eye.y, eye.z));
         }).findFirst().orElse(null);
     }
     
@@ -565,7 +563,7 @@ public class Utils
     
     public static EntityPlayer getNearestPlayer(World w, Vec3d v)
     {
-        return w.getPlayers(EntityPlayer.class, p -> true).stream().min((p1, p2) -> Double.compare(p1.getDistanceSq(v.xCoord, v.yCoord, v.zCoord), p2.getDistanceSq(v.xCoord, v.yCoord, v.zCoord))).orElse(null);
+        return w.playerEntities.stream().min((p1, p2) -> Double.compare(p1.getDistanceSq(v.x, v.y, v.z), p2.getDistanceSq(v.x, v.y, v.z))).orElse(null);
     }
     
     public static BlockPos getPlayerTarget(EntityPlayer p, double range, boolean boundingBox)
@@ -625,7 +623,7 @@ public class Utils
         SimpleConfig conf = KajetansMod.conf;
         conf.setLocation("spawn", new Location(w, v, yaw, pitch));
         conf.save();
-        w.setSpawnPoint(new BlockPos(v.xCoord, v.yCoord, v.zCoord));
+        w.setSpawnPoint(new BlockPos(v.x, v.y, v.z));
     }
     
     // -------------------------------------------------------------------------

+ 3 - 2
src/main/java/me/km/blocks/BlockBase.java

@@ -9,6 +9,7 @@ import net.minecraft.creativetab.CreativeTabs;
 import net.minecraft.entity.Entity;
 import net.minecraft.item.ItemBlock;
 import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
 import net.minecraft.world.World;
 
 public class BlockBase extends Block implements IBlockBase
@@ -33,9 +34,9 @@ public class BlockBase extends Block implements IBlockBase
         this.mapColor = mapColor;
         return this;
     }
-    
+
     @Override
-    public MapColor getMapColor(IBlockState state)
+    public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos) 
     {
         return this.mapColor;
     }

+ 18 - 18
src/main/java/me/km/blocks/BlockEvents.java

@@ -68,9 +68,9 @@ public class BlockEvents
                         d1 = d1 / d3;
                         d2 = d2 / d3;
                         float f = explosionSize * (0.7f + w.rand.nextFloat() * 0.6f);
-                        double d4 = v.xCoord;
-                        double d6 = v.yCoord;
-                        double d8 = v.zCoord;
+                        double d4 = v.x;
+                        double d6 = v.y;
+                        double d8 = v.z;
 
                         for(float f1 = 0.3F; f > 0.0F; f -= 0.22500001F)
                         {
@@ -89,7 +89,7 @@ public class BlockEvents
                                 f -= (f2 + 0.3F) * 0.3F;
                             }
 
-                            if (f > 0.0F && (exploder == null || exploder.verifyExplosion(ex, w, blockpos, iblockstate, f)))
+                            if (f > 0.0F && (exploder == null || exploder.canExplosionDestroyBlock(ex, w, blockpos, iblockstate, f)))
                             {
                                 set.add(blockpos);
                             }
@@ -105,15 +105,15 @@ public class BlockEvents
 
         ex.getAffectedBlockPositions().addAll(set);
         float f3 = explosionSize * 2;
-        int k1 = MathHelper.floor(v.xCoord - f3 - 1);
-        int l1 = MathHelper.floor(v.xCoord + f3 + 1);
-        int i2 = MathHelper.floor(v.yCoord - f3 - 1);
-        int i1 = MathHelper.floor(v.yCoord + f3 + 1);
-        int j2 = MathHelper.floor(v.zCoord - f3 - 1);
-        int j1 = MathHelper.floor(v.zCoord + f3 + 1);
+        int k1 = MathHelper.floor(v.x - f3 - 1);
+        int l1 = MathHelper.floor(v.x + f3 + 1);
+        int i2 = MathHelper.floor(v.y - f3 - 1);
+        int i1 = MathHelper.floor(v.y + f3 + 1);
+        int j2 = MathHelper.floor(v.z - f3 - 1);
+        int j1 = MathHelper.floor(v.z + f3 + 1);
         List<Entity> list = w.getEntitiesWithinAABBExcludingEntity(exploder, new AxisAlignedBB(k1, i2, j2, l1, i1, j1));
         net.minecraftforge.event.ForgeEventFactory.onExplosionDetonate(w, ex, list, f3);
-        Vec3d vec3d = new Vec3d(v.xCoord, v.yCoord, v.zCoord);
+        Vec3d vec3d = new Vec3d(v.x, v.y, v.z);
 
         for(int k2 = 0; k2 < list.size(); k2++)
         {
@@ -121,13 +121,13 @@ public class BlockEvents
 
             if(!entity.isImmuneToExplosions())
             {
-                double d12 = entity.getDistance(v.xCoord, v.yCoord, v.zCoord) / f3;
+                double d12 = entity.getDistance(v.x, v.y, v.z) / f3;
 
                 if(d12 <= 1.0D)
                 {
-                    double d5 = entity.posX - v.xCoord;
-                    double d7 = entity.posY + (double)entity.getEyeHeight() - v.yCoord;
-                    double d9 = entity.posZ - v.zCoord;
+                    double d5 = entity.posX - v.x;
+                    double d7 = entity.posY + (double)entity.getEyeHeight() - v.y;
+                    double d9 = entity.posZ - v.z;
                     double d13 = MathHelper.sqrt(d5 * d5 + d7 * d7 + d9 * d9);
 
                     if(d13 != 0.0D)
@@ -167,9 +167,9 @@ public class BlockEvents
     private void doExplosionB(Explosion ex, World w, boolean spawnParticles)
     {
         Vec3d v = ex.getPosition();
-        double x = v.xCoord;
-        double y = v.yCoord;
-        double z = v.zCoord;
+        double x = v.x;
+        double y = v.y;
+        double z = v.z;
         w.playSound(null, x, y, z, SoundEvents.ENTITY_GENERIC_EXPLODE, SoundCategory.BLOCKS, 4, (1 + (w.rand.nextFloat() - w.rand.nextFloat()) * 0.2f) * 0.7f);
 
         if(ReflectionUtils.getSize(ex) >= 2 && ReflectionUtils.isSmoking(ex))

+ 5 - 5
src/main/java/me/km/blocks/BlockSpikeTrap.java

@@ -63,7 +63,7 @@ public class BlockSpikeTrap extends BlockTrap
     }
     
     @Override
-    public MapColor getMapColor(IBlockState state)
+    public MapColor getMapColor(IBlockState state, IBlockAccess worldIn, BlockPos pos)
     {
         return state.getValue(VARIANT).getMapColor();
     }
@@ -78,15 +78,15 @@ public class BlockSpikeTrap extends BlockTrap
     public ItemStack getItem(World worldIn, BlockPos pos, IBlockState state)
     {
         return new ItemStack(ModBlocks.spikes, 1, state.getValue(VARIANT).getMetadata());
-    }
-
+    }   
+    
     @SideOnly(Side.CLIENT)
     @Override
-    public void getSubBlocks(Item item, CreativeTabs tab, NonNullList<ItemStack> list)
+    public void getSubBlocks(CreativeTabs tab, NonNullList<ItemStack> list)
     {
         for(EnumMetals metal : EnumMetals.values())
         {
-            list.add(new ItemStack(item, 1, metal.getMetadata()));
+            list.add(new ItemStack(this, 1, metal.getMetadata()));
         }
     }
 

+ 2 - 2
src/main/java/me/km/blocks/BlockTrap.java

@@ -75,8 +75,8 @@ public class BlockTrap extends BlockBase
     }
     
     @Override
-    public boolean blocksMovement(IBlockAccess worldIn, BlockPos pos)
+    public boolean isPassable(IBlockAccess worldIn, BlockPos pos)
     {
-        return false;
+        return true;
     }
 }

+ 10 - 1
src/main/java/me/km/blocks/EnumMetals.java

@@ -19,7 +19,7 @@ public enum EnumMetals implements IStringSerializable
     private final int meta;
     private final String name;
     private final MapColor mapColor;
-    private final Item item;
+    private Item item;
 
     private EnumMetals(int meta, String name, MapColor mapColor, Item item)
     {
@@ -34,6 +34,15 @@ public enum EnumMetals implements IStringSerializable
         return item;
     }
     
+    // items become null somehow
+    public static void fixMetalIngots() 
+    {
+        COPPER.item = ModItems.copperIngot;
+        TIN.item = ModItems.tinIngot;
+        BRONZE.item = ModItems.bronzeIngot;
+        SILVER.item = ModItems.silverIngot;
+    }
+    
     public int getMetadata()
     {
         return this.meta;

+ 63 - 34
src/main/java/me/km/blocks/ModBlocks.java

@@ -9,9 +9,9 @@ import net.minecraft.block.Block;
 import net.minecraft.block.material.MapColor;
 import net.minecraft.block.material.Material;
 import net.minecraft.init.Blocks;
+import net.minecraft.item.Item;
 import net.minecraft.item.ItemBlock;
-import net.minecraftforge.fml.common.registry.ExistingSubstitutionException;
-import net.minecraftforge.fml.common.registry.GameRegistry;
+import net.minecraftforge.registries.IForgeRegistry;
 
 public class ModBlocks 
 {
@@ -40,64 +40,94 @@ public class ModBlocks
     public static BlockFluidPoison poison;
     public static BlockFluidHoney honey;
     
-    public static void init() 
+    public static void initBlocks(IForgeRegistry<Block> r) 
     {
         // ores + blocks
-        copperOre = register(new BlockOre("copper_ore", "oreCopper"));      
-        copperBlock = register((BlockBase) new BlockBase(Material.IRON, "copper_block", "blockCopper")
+        copperOre = register(r, new BlockOre("copper_ore", "oreCopper"));      
+        copperBlock = register(r, (BlockBase) new BlockBase(Material.IRON, "copper_block", "blockCopper")
                 .setMapColor(MapColor.BROWN).setHardness(3).setResistance(10));
-        tinOre = register(new BlockOre("tin_ore", "oreTin"));      
-        tinBlock = register((BlockBase) new BlockBase(Material.IRON, "tin_block", "blockTin")
+        tinOre = register(r, new BlockOre("tin_ore", "oreTin"));      
+        tinBlock = register(r, (BlockBase) new BlockBase(Material.IRON, "tin_block", "blockTin")
                 .setMapColor(MapColor.IRON).setHardness(3).setResistance(5));
-        bronzeBlock = register((BlockBase) new BlockBase(Material.IRON, "bronze_block", "blockBronze")
+        bronzeBlock = register(r, (BlockBase) new BlockBase(Material.IRON, "bronze_block", "blockBronze")
                 .setMapColor(MapColor.YELLOW).setHardness(5).setResistance(10));
-        silverOre = register(new BlockOre("silver_ore", "oreSilver"));      
-        silverBlock = register((BlockBase) new BlockBase(Material.IRON, "silver_block", "blockSilver")
+        silverOre = register(r, new BlockOre("silver_ore", "oreSilver"));      
+        silverBlock = register(r, (BlockBase) new BlockBase(Material.IRON, "silver_block", "blockSilver")
                 .setMapColor(MapColor.IRON).setHardness(5).setResistance(10));
         
         // misc
-        guildblock = register((BlockBase) new BlockBase(Material.IRON, "guild_block", "blockGuild")
+        guildblock = register(r, (BlockBase) new BlockBase(Material.IRON, "guild_block", "blockGuild")
                 .setHardness(50.0F).setResistance(2000.0F));
-        artefact = register((BlockBase) new BlockBase(Material.IRON, "artefact", "artefact")
+        artefact = register(r, (BlockBase) new BlockBase(Material.IRON, "artefact", "artefact")
                 .setHardness(50.0F).setResistance(2000.0F));
-        realHayBlock = register(new BlockHay("real_hay_block", "realHayBlock"));
-        realHayBed = registerBlock(new BlockHayBed("real_hay_bed", "realHayBlock"));
+        realHayBlock = register(r, new BlockHay("real_hay_block", "realHayBlock"));
+        realHayBed = register(r, new BlockHayBed("real_hay_bed", "realHayBlock"));
         
         // traps
-        spikes = registerMetal(new BlockSpikeTrap(Material.IRON, "spikes", "spikes"));
+        spikes = register(r, new BlockSpikeTrap(Material.IRON, "spikes", "spikes"));
     
         // fluids
-        poison = register(new BlockFluidPoison(ModFluids.poison, Material.WATER));
-        honey = register(new BlockFluidHoney(ModFluids.honey, Material.WATER));
+        poison = register(r, new BlockFluidPoison(ModFluids.poison, Material.WATER));
+        honey = register(r, new BlockFluidHoney(ModFluids.honey, Material.WATER));
+    }
+    
+    public static void initItemBlocks(IForgeRegistry<Item> r) 
+    {
+        // ores + blocks
+        register(r, copperOre, getItemBlock(copperOre));
+        register(r, copperBlock, getItemBlock(copperBlock));
+        
+        register(r, tinOre, getItemBlock(tinOre));
+        register(r, tinBlock, getItemBlock(tinBlock));
+        
+        register(r, bronzeBlock, getItemBlock(bronzeBlock));
+        
+        register(r, silverOre, getItemBlock(silverOre));
+        register(r, silverBlock, getItemBlock(silverBlock));
+
+        // misc
+        register(r, guildblock, getItemBlock(guildblock));
+        register(r, artefact, getItemBlock(artefact));
+        
+        register(r, realHayBlock, getItemBlock(realHayBlock));
+        
+        // traps
+        register(r, spikes, getItemMetal(spikes));
+        
+        // fluids
+        register(r, poison, getItemBlock(poison));
+        register(r, honey, getItemBlock(honey));
     }
     
     // THIS IS ONLY FOR REPLACING VANILLA BLOCKS
-    public static void lateInit() 
+    public static void initReplacementBlocks(IForgeRegistry<Block> r) 
     {
         BlockTallGrass grass = new BlockTallGrass();
-        overwriteBlock(Blocks.TALLGRASS, grass);
+        overwriteBlock(r, Blocks.TALLGRASS, grass);
     }
     
     @SuppressWarnings("")
-    private static void overwriteBlock(Block old, Block block)
+    private static void overwriteBlock(IForgeRegistry<Block> r, Block old, Block block)
     {
-        try
-        {
-            GameRegistry.addSubstitutionAlias(old.getRegistryName().toString(), 
+        /*try
+        {*/
+            block.setRegistryName(old.getRegistryName().getResourcePath());
+            block.setUnlocalizedName(old.getUnlocalizedName().substring(5));
+            r.register(block);
+            /*GameRegistry.addSubstitutionAlias(old.getRegistryName().toString(), 
                     GameRegistry.Type.BLOCK, 
                     block.setRegistryName(old.getRegistryName().getResourcePath()).setUnlocalizedName(old.getUnlocalizedName().substring(5)));
         }
         catch(ExistingSubstitutionException | NullPointerException ex)
         {
             System.out.println(ex);
-        }
+        }*/
     }
     //END OF REPLACING VANILLA BLOCKS
 
-    private static <T extends Block> T register(T block, ItemBlock itemBlock) 
+    private static void register(IForgeRegistry<Item> r, Block block, ItemBlock itemBlock) 
     {
-        GameRegistry.register(block);
-        GameRegistry.register(itemBlock);
+        r.register(itemBlock);
         if(block instanceof IBlockBase) 
         {
             ((IBlockBase) block).registerItemModel(itemBlock);
@@ -106,26 +136,25 @@ public class ModBlocks
         {
             ((BlockFluidBase) block).registerBlockModel();
         }
-        return block;
     }
     
-    private static <T extends Block> T registerBlock(T block) 
+    private static <T extends Block> T register(IForgeRegistry<Block> r, T block) 
     {
-        GameRegistry.register(block);
+        r.register(block);
         return block;
     }
 
-    private static <T extends Block> T register(T block) 
+    private static ItemBlock getItemBlock(Block block) 
     {
         ItemBlock itemBlock = new ItemBlock(block);
         itemBlock.setRegistryName(block.getRegistryName());
-        return register(block, itemBlock);
+        return itemBlock;
     }
     
-    private static <T extends Block> T registerMetal(T block) 
+    private static ItemMetal getItemMetal(Block block) 
     {
         ItemMetal itemBlock = new ItemMetal(block);
         itemBlock.setRegistryName(block.getRegistryName());
-        return register(block, itemBlock);
+        return itemBlock;
     }
 }

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

@@ -10,6 +10,7 @@ import me.km.permissions.Permissions;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraft.server.management.UserListBansEntry;
+import net.minecraft.util.text.TextComponentString;
 
 public class CommandBan extends ModuleCommand
 {
@@ -42,7 +43,7 @@ public class CommandBan extends ModuleCommand
         EntityPlayerMP p = KajetansMod.server.getPlayerList().getPlayerByUUID(affectedPlayer.getId());
         if(p != null)
         {
-            p.connection.disconnect("§4Du §cwurdest von §4" + cs.getName() + "§c gebannt, weil: §4" + message);
+            p.connection.disconnect(new TextComponentString("§4Du §cwurdest von §4" + cs.getName() + "§c gebannt, weil: §4" + message));
         }
         return true;
     }

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

@@ -8,6 +8,7 @@ import me.km.exception.PlayerNotFoundException;
 import me.km.permissions.Permissions;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.util.text.TextComponentString;
 
 public class CommandKick extends ModuleCommand
 {
@@ -38,7 +39,7 @@ public class CommandKick extends ModuleCommand
         }                      
         String message = Utils.connectSpaces(arg, 1);
         this.getModule().sendBroadcast("§4" + affectedPlayer.getName() + " §cwurde von §4" + cs.getName() + "§c gekickt, weil: §4" + message);  
-        affectedPlayer.connection.disconnect("§4Du §cwurdest von §4" + cs.getName() + "§c gekickt, weil: §4" + message);
+        affectedPlayer.connection.disconnect(new TextComponentString("§4Du §cwurdest von §4" + cs.getName() + "§c gekickt, weil: §4" + message));
         return true;
     }
 }

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

@@ -11,6 +11,7 @@ import me.km.permissions.Permissions;
 import net.minecraft.command.ICommandSender;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraft.server.management.UserListBansEntry;
+import net.minecraft.util.text.TextComponentString;
 
 public class CommandTempBan extends ModuleCommand
 {
@@ -73,7 +74,7 @@ public class CommandTempBan extends ModuleCommand
         EntityPlayerMP p = KajetansMod.server.getPlayerList().getPlayerByUUID(affectedPlayer.getId());
         if(p != null)
         {
-            p.connection.disconnect("§4Du §cwurdest von §4" + cs.getName() + "§c für " + time + " gebannt, weil: §4" + message);
+            p.connection.disconnect(new TextComponentString("§4Du §cwurdest von §4" + cs.getName() + "§c für " + time + " gebannt, weil: §4" + message));
         }
         return true;
     }

+ 1 - 1
src/main/java/me/km/commands/CommandTop.java

@@ -46,7 +46,7 @@ public class CommandTop extends ModuleCommand
         }
         World w = affectedPlayer.getEntityWorld();
         Vec3d v = affectedPlayer.getPositionVector();
-        v = v.addVector(0, w.getHeight((int) v.xCoord, (int) v.zCoord) - v.yCoord, 0);
+        v = v.addVector(0, w.getHeight((int) v.x, (int) v.z) - v.y, 0);
         Utils.teleportEntity(affectedPlayer, new Location(w, v));
         this.getModule().send(cs, "Du wurdest nach oben teleportiert.");
         if(!cs.equals(affectedPlayer))

+ 1 - 1
src/main/java/me/km/commands/CommandTpPos.java

@@ -67,7 +67,7 @@ public class CommandTpPos extends ModuleCommand
             }
             Vec3d v = new Vec3d(Double.parseDouble(arg[0]), Double.parseDouble(arg[1]), Double.parseDouble(arg[2]));
             Utils.teleportEntity(affectedPlayer, new Location(w, v));
-            String s = " zu " + v.xCoord + ", " + v.yCoord + ", " + v.zCoord + " teleportiert.";
+            String s = " zu " + v.x + ", " + v.y + ", " + v.z + " teleportiert.";
             this.getModule().send(affectedPlayer, "Du wurdest" + s);
             if(!cs.equals(affectedPlayer))
             {

+ 3 - 4
src/main/java/me/km/dimensions/ModWorldGeneration.java

@@ -7,21 +7,20 @@ import net.minecraft.init.Biomes;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.world.World;
 import net.minecraft.world.biome.Biome;
-import net.minecraft.world.chunk.IChunkGenerator;
 import net.minecraft.world.chunk.IChunkProvider;
+import net.minecraft.world.gen.IChunkGenerator;
 import net.minecraft.world.gen.feature.WorldGenMinable;
 import net.minecraftforge.fml.common.IWorldGenerator;
 
 public class ModWorldGeneration implements IWorldGenerator
 {
     @Override
-    public void generate(Random random, int chunkX, int chunkZ, World w, 
-            IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) 
+    public void generate(Random r, int cX, int cZ, World w, IChunkGenerator cGen, IChunkProvider cPro) 
     {
         Biome biome = w.getBiome(BlockPos.ORIGIN);
         if(biome != Biomes.HELL && biome != Biomes.SKY) 
         {
-            generateOverworld(random, chunkX, chunkZ, w, chunkGenerator, chunkProvider);
+            generateOverworld(r, cX, cZ, w, cGen, cPro);
 	}
     }
 	

+ 9 - 9
src/main/java/me/km/effects/EffectUtils.java

@@ -202,7 +202,7 @@ public class EffectUtils extends Module
     
     public static void spawnParticle(WorldServer w, EnumParticleTypes particle, Vec3d v, int count)
     {
-        spawnParticle(w, particle, (float) v.xCoord, (float) v.yCoord, (float) v.zCoord, 0, 0, 0, count);
+        spawnParticle(w, particle, (float) v.x, (float) v.y, (float) v.z, 0, 0, 0, count);
     }
     
     public static void playSpell(EntityPlayerMP p, int level)
@@ -212,9 +212,9 @@ public class EffectUtils extends Module
     
     public static <T> void playEffectCircleWithData(WorldServer w, Vec3d v, EnumParticleTypes particle, double radius, int counter, int... data)
     {
-        double x = v.xCoord;
-        float y = (float) v.yCoord;
-        double z = v.yCoord;
+        double x = v.x;
+        float y = (float) v.y;
+        double z = v.z;
         double angle = 2 * Math.PI / counter;
         for(int i = 0; i < counter; i++)
         {
@@ -262,7 +262,7 @@ public class EffectUtils extends Module
     
     public static void spawnPotionCloud(Vec3d v, EntityPlayerMP p, Potion potion, int pduration, int amplifier, int duration, float radius)
     {
-        EntityAreaEffectCloud cloud = new EntityAreaEffectCloud(p.getServerWorld(), v.xCoord, v.yCoord, v.zCoord);
+        EntityAreaEffectCloud cloud = new EntityAreaEffectCloud(p.getServerWorld(), v.x, v.y, v.z);
         cloud.setDuration(duration);
         cloud.setRadius(radius);
         cloud.setOwner(p);
@@ -349,19 +349,19 @@ public class EffectUtils extends Module
             Vec3d v = p.getLookVec().scale(10);
             if (EntitySmallFireball.class == projectile) 
             {
-                launch = new EntitySmallFireball(w, p, v.xCoord, v.yCoord, v.zCoord);
+                launch = new EntitySmallFireball(w, p, v.x, v.y, v.z);
             } 
             else if (EntityWitherSkull.class == projectile) 
             {
-                launch = new EntityWitherSkull(w, p, v.xCoord, v.yCoord, v.zCoord);
+                launch = new EntityWitherSkull(w, p, v.x, v.y, v.z);
             } 
             else if (EntityDragonFireball.class == projectile) 
             {
-                launch = new EntityDragonFireball(w, p, v.xCoord, v.yCoord, v.zCoord);
+                launch = new EntityDragonFireball(w, p, v.x, v.y, v.z);
             } 
             else 
             {
-                launch = new EntityLargeFireball(w, p, v.xCoord, v.yCoord, v.zCoord);
+                launch = new EntityLargeFireball(w, p, v.x, v.y, v.z);
             }
         } 
 

+ 2 - 2
src/main/java/me/km/effects/active/Doomed.java

@@ -21,13 +21,13 @@ public class Doomed extends ActiveEffectBase
         Vec3d v1 = p2.getPositionVector();
         Vec3d v2 = p.getPositionVector();
         
-        Utils.setVelocity(p, (v1.xCoord - v2.xCoord) * 0.2, (v1.yCoord - v2.yCoord) * 0.2 + 0.9, (v1.zCoord - v2.zCoord) * 0.2);
+        Utils.setVelocity(p, (v1.x - v2.x) * 0.2, (v1.y - v2.y) * 0.2 + 0.9, (v1.z - v2.z) * 0.2);
 
          KajetansMod.scheduler.scheduleTask(() -> 
         {
             Vec3d v3 = p2.getPositionVector();
             Vec3d v4 = p.getPositionVector();
-            Utils.setVelocity(p, (v3.xCoord - v4.xCoord) * 0.2, (v3.yCoord - v4.yCoord) * 0.2, (v3.zCoord - v4.zCoord) * 0.2);
+            Utils.setVelocity(p, (v3.x - v4.x) * 0.2, (v3.y - v4.y) * 0.2, (v3.z - v4.z) * 0.2);
         }, 12);
         int duration = 20 * power;
         KajetansMod.playerbank.getData(p2).addBadTimedData("doomed", p, duration, "Todgeweiht", 52);

+ 1 - 1
src/main/java/me/km/effects/active/Flying.java

@@ -15,7 +15,7 @@ public class Flying extends ActiveEffectBase
         EffectUtils.playSound(p, SoundEvents.ENTITY_FIREWORK_LAUNCH);
         EffectUtils.playSpell(p, power);
         Vec3d v = p.getLookVec().scale(1 + (power / 20f));
-        Utils.setVelocity(p, v.xCoord, v.yCoord, v.zCoord);
+        Utils.setVelocity(p, v.x, v.y, v.z);
         return true;
     }
 

+ 3 - 3
src/main/java/me/km/effects/active/Jump.java

@@ -15,11 +15,11 @@ public class Jump extends ActiveEffectBase
             return false;
         }
         Vec3d v = p.getLookVec();
-        double groundLength = Math.sqrt(v.xCoord * v.xCoord + v.zCoord * v.zCoord);
-        Vec3d goal = new Vec3d(v.xCoord, groundLength * 1.732050807568877, v.zCoord); // 60° shot
+        double groundLength = Math.sqrt(v.x * v.x + v.z * v.z);
+        Vec3d goal = new Vec3d(v.x, groundLength * 1.732050807568877, v.z); // 60° shot
         goal = goal.normalize();
         goal = goal.scale(Math.sqrt((power + 0.85d) / 0.26) / 4);
-        Utils.setVelocity(p, goal.xCoord, goal.yCoord, goal.zCoord);
+        Utils.setVelocity(p, goal.x, goal.y, goal.z);
         return true;
     }
 

+ 1 - 1
src/main/java/me/km/effects/active/Kick.java

@@ -19,7 +19,7 @@ public class Kick extends ActiveEffectBase
             return false;
         }
         Vec3d v = liv.getPositionVector().subtract(p.getPositionVector()).normalize().scale(2).addVector(0, 0.4, 0);
-        Utils.setVelocity(liv, v.xCoord, v.yCoord, v.zCoord);
+        Utils.setVelocity(liv, v.x, v.y, v.z);
         liv.addPotionEffect(new PotionEffect(MobEffects.NAUSEA, 120, 10));
         return true;
     }

+ 1 - 1
src/main/java/me/km/effects/active/Pull.java

@@ -15,7 +15,7 @@ public class Pull extends ActiveEffectBase
         EffectUtils.getEntsOfNotGuild(p, power + 2).stream().forEach(ent -> 
         {
             Vec3d v2 = v.subtract(ent.getPositionVector()).normalize();
-            Utils.setVelocity(ent, v2.xCoord, v2.yCoord, v2.zCoord);
+            Utils.setVelocity(ent, v2.x, v2.y, v2.z);
         });
         return true;
     }

+ 1 - 1
src/main/java/me/km/effects/active/Push.java

@@ -15,7 +15,7 @@ public class Push extends ActiveEffectBase
         EffectUtils.getEntsOfNotGuild(p, power + 2).stream().forEach(ent -> 
         {
             Vec3d v2 = ent.getPositionVector().subtract(v).normalize();
-            Utils.setVelocity(ent, v2.xCoord, v2.yCoord, v2.zCoord);
+            Utils.setVelocity(ent, v2.x, v2.y, v2.z);
         });
         return true;
     }

+ 1 - 1
src/main/java/me/km/effects/passive/ArrowEffects.java

@@ -134,7 +134,7 @@ public class ArrowEffects extends ModuleListener
     @SubscribeEvent
     public void handleHitShots(LivingHurtEvent e)
     {       
-        Entity ent = e.getSource().getSourceOfDamage();
+        Entity ent = e.getSource().getImmediateSource();
         if(ent != null && ent instanceof EntityArrow && KajetansMod.worldManager.getWorldPreferences(ent.world).skills)
         {
             runArrowEffects((EntityArrow) ent);

+ 1 - 1
src/main/java/me/km/effects/passive/EntityDamageEffects.java

@@ -73,7 +73,7 @@ public class EntityDamageEffects extends ModuleListener
         {
             return;
         }  
-        Entity ent = e.getSource().getEntity();
+        Entity ent = e.getSource().getImmediateSource();
         if(ent == null || !(ent instanceof EntityPlayerMP))
         {
             return;

+ 2 - 2
src/main/java/me/km/effects/passive/EntityDrop.java

@@ -29,7 +29,7 @@ public class EntityDrop extends ModuleListener
         {
             return;
         }
-        Entity killer = e.getSource().getSourceOfDamage();              
+        Entity killer = e.getSource().getImmediateSource();              
         if(killer == null || !(killer instanceof EntityPlayer))
         {
             return;
@@ -44,7 +44,7 @@ public class EntityDrop extends ModuleListener
                 random = Utils.randomInt(-2, drops);
                 if(random >= 1)
                 {
-                    item.getEntityItem().grow(random);
+                    item.getItem().grow(random);
                 }
             }
         }

+ 1 - 1
src/main/java/me/km/effects/passive/ThrowableEffects.java

@@ -25,7 +25,7 @@ public class ThrowableEffects extends ModuleListener
     @SubscribeEvent(receiveCanceled = false)
     public void preventEnderPearlDamage(PlayerHurtEvent e)
     {        
-        Entity ent = e.getSource().getSourceOfDamage();
+        Entity ent = e.getSource().getImmediateSource();
         if(ent != null && ent.getClass() == EntityEnderPearl.class && 
             KajetansMod.worldManager.getWorldPreferences(ent.world).skills &&
             EffectUtils.getEffectLevel(e.getEntityPlayer(), Effect.NO_ENDERPEARL_DAMAGE) >= 1)

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

@@ -164,7 +164,7 @@ public class EntityItemProjectile extends EntityItem implements IProjectile
         {
             if(thrower instanceof EntityPlayer)
             {
-                KajetansMod.scripts.getEvent(ScriptEvents.class).onEntityItemProjectileHit((EntityPlayer) thrower, this.getEntityItem(), list);
+                KajetansMod.scripts.getEvent(ScriptEvents.class).onEntityItemProjectileHit((EntityPlayer) thrower, this.getItem(), list);
             }
         }
         else

+ 80 - 75
src/main/java/me/km/items/ModItems.java

@@ -1,6 +1,7 @@
 package me.km.items;
 
 import me.km.KajetansMod;
+import me.km.blocks.EnumMetals;
 import net.minecraft.creativetab.CreativeTabs;
 import net.minecraft.init.Items;
 import net.minecraft.init.SoundEvents;
@@ -10,7 +11,7 @@ import net.minecraft.item.Item;
 import net.minecraft.item.ItemArmor.ArmorMaterial;
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.common.util.EnumHelper;
-import net.minecraftforge.fml.common.registry.GameRegistry;
+import net.minecraftforge.registries.IForgeRegistry;
 
 public class ModItems 
 {
@@ -160,20 +161,20 @@ public class ModItems
     public static ItemBase batWing; 
     public static ItemBase wolfFur; 
     
-    public static void init() 
+    public static void init(IForgeRegistry<Item> r) 
     {
         // nuggets and ingots
-	copperIngot = register(new ItemBase("copper_ingot", "ingotCopper").setCreativeTab(CreativeTabs.MATERIALS));
-        copperNugget = register(new ItemBase("copper_nugget", "copperNugget").setCreativeTab(CreativeTabs.MATERIALS));
+	copperIngot = register(r, new ItemBase("copper_ingot", "ingotCopper").setCreativeTab(CreativeTabs.MATERIALS));
+        copperNugget = register(r, new ItemBase("copper_nugget", "copperNugget").setCreativeTab(CreativeTabs.MATERIALS));
         
-        tinIngot = register(new ItemBase("tin_ingot", "ingotTin").setCreativeTab(CreativeTabs.MATERIALS));
-        tinNugget = register(new ItemBase("tin_nugget", "tinNugget").setCreativeTab(CreativeTabs.MATERIALS));
+        tinIngot = register(r, new ItemBase("tin_ingot", "ingotTin").setCreativeTab(CreativeTabs.MATERIALS));
+        tinNugget = register(r, new ItemBase("tin_nugget", "tinNugget").setCreativeTab(CreativeTabs.MATERIALS));
         
-        bronzeIngot = register(new ItemBase("bronze_ingot", "ingotBronze").setCreativeTab(CreativeTabs.MATERIALS));
-        bronzeNugget = register(new ItemBase("bronze_nugget", "bronzeNugget").setCreativeTab(CreativeTabs.MATERIALS));
+        bronzeIngot = register(r, new ItemBase("bronze_ingot", "ingotBronze").setCreativeTab(CreativeTabs.MATERIALS));
+        bronzeNugget = register(r, new ItemBase("bronze_nugget", "bronzeNugget").setCreativeTab(CreativeTabs.MATERIALS));
         
-        silverIngot = register(new ItemBase("silver_ingot", "ingotSilver").setCreativeTab(CreativeTabs.MATERIALS));
-        silverNugget = register(new ItemBase("silver_nugget", "silverNugget").setCreativeTab(CreativeTabs.MATERIALS));
+        silverIngot = register(r, new ItemBase("silver_ingot", "ingotSilver").setCreativeTab(CreativeTabs.MATERIALS));
+        silverNugget = register(r, new ItemBase("silver_nugget", "silverNugget").setCreativeTab(CreativeTabs.MATERIALS));
         
         // repair items
         TOOL_COPPER.setRepairItem(new ItemStack(copperIngot));
@@ -186,92 +187,96 @@ public class ModItems
         TOOL_SILVER.setRepairItem(new ItemStack(silverIngot));
         
         // tools and swords
-        copperSword =  register(new ItemSword(TOOL_COPPER, "copper_sword", "swordCopper"));
-        copperShovel = register(new ItemSpade(TOOL_COPPER, "copper_shovel", "shovelCopper"));
-        copperPickaxe = register(new ItemPickaxe(TOOL_COPPER, "copper_pickaxe", "pickaxeCopper"));
-        copperAxe = register(new ItemAxe(TOOL_COPPER, 7, -3.1f, "copper_axe", "hatchetCopper"));
-        copperHoe = register(new ItemHoe(TOOL_COPPER, "copper_hoe", "hoeCopper"));
+        copperSword =  register(r, new ItemSword(TOOL_COPPER, "copper_sword", "swordCopper"));
+        copperShovel = register(r, new ItemSpade(TOOL_COPPER, "copper_shovel", "shovelCopper"));
+        copperPickaxe = register(r, new ItemPickaxe(TOOL_COPPER, "copper_pickaxe", "pickaxeCopper"));
+        copperAxe = register(r, new ItemAxe(TOOL_COPPER, 7, -3.1f, "copper_axe", "hatchetCopper"));
+        copperHoe = register(r, new ItemHoe(TOOL_COPPER, "copper_hoe", "hoeCopper"));
         
-        bronzeSword =  register(new ItemSword(TOOL_BRONZE, "bronze_sword", "swordBronze"));
-        bronzeShovel = register(new ItemSpade(TOOL_BRONZE, "bronze_shovel", "shovelBronze"));
-        bronzePickaxe = register(new ItemPickaxe(TOOL_BRONZE, "bronze_pickaxe", "pickaxeBronze"));
-        bronzeAxe = register(new ItemAxe(TOOL_BRONZE, 8, -3.0f, "bronze_axe", "hatchetBronze"));
-        bronzeHoe = register(new ItemHoe(TOOL_BRONZE, "bronze_hoe", "hoeBronze"));
+        bronzeSword =  register(r, new ItemSword(TOOL_BRONZE, "bronze_sword", "swordBronze"));
+        bronzeShovel = register(r, new ItemSpade(TOOL_BRONZE, "bronze_shovel", "shovelBronze"));
+        bronzePickaxe = register(r, new ItemPickaxe(TOOL_BRONZE, "bronze_pickaxe", "pickaxeBronze"));
+        bronzeAxe = register(r, new ItemAxe(TOOL_BRONZE, 8, -3.0f, "bronze_axe", "hatchetBronze"));
+        bronzeHoe = register(r, new ItemHoe(TOOL_BRONZE, "bronze_hoe", "hoeBronze"));
                
         // armor
-        copperHelmet = register(new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.HEAD, "copper_helmet", "helmetCopper"));
-        copperChestplate = register(new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.CHEST, "copper_chestplate", "chestplateCopper"));
-        copperLeggings = register(new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.LEGS, "copper_leggings", "leggingsCopper"));
-        copperBoots = register(new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.FEET, "copper_boots", "bootsCopper"));
+        copperHelmet = register(r, new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.HEAD, "copper_helmet", "helmetCopper"));
+        copperChestplate = register(r, new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.CHEST, "copper_chestplate", "chestplateCopper"));
+        copperLeggings = register(r, new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.LEGS, "copper_leggings", "leggingsCopper"));
+        copperBoots = register(r, new ItemArmor(ARMOR_COPPER, EntityEquipmentSlot.FEET, "copper_boots", "bootsCopper"));
         
-        bronzeHelmet = register(new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.HEAD, "bronze_helmet", "helmetBronze"));
-        bronzeChestplate = register(new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.CHEST, "bronze_chestplate", "chestplateBronze"));
-        bronzeLeggings = register(new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.LEGS, "bronze_leggings", "leggingsBronze"));
-        bronzeBoots = register(new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.FEET, "bronze_boots", "bootsBronze"));
+        bronzeHelmet = register(r, new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.HEAD, "bronze_helmet", "helmetBronze"));
+        bronzeChestplate = register(r, new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.CHEST, "bronze_chestplate", "chestplateBronze"));
+        bronzeLeggings = register(r, new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.LEGS, "bronze_leggings", "leggingsBronze"));
+        bronzeBoots = register(r, new ItemArmor(ARMOR_BRONZE, EntityEquipmentSlot.FEET, "bronze_boots", "bootsBronze"));
         
-        cylinder = register(new ItemCylinder(ARMOR_CYLINDER, "cylinder", "cylinder"));
-        suitChestplate = register(new ItemArmor(ARMOR_SUIT, EntityEquipmentSlot.CHEST, "suit_chestplate", "chestplateSuit"));
-        suitLeggings = register(new ItemArmor(ARMOR_SUIT, EntityEquipmentSlot.LEGS, "suit_leggings", "leggingsSuit"));
-        suitBoots = register(new ItemArmor(ARMOR_SUIT, EntityEquipmentSlot.FEET, "suit_boots", "bootsSuit"));
+        cylinder = register(r, new ItemCylinder(ARMOR_CYLINDER, "cylinder", "cylinder"));
+        suitChestplate = register(r, new ItemArmor(ARMOR_SUIT, EntityEquipmentSlot.CHEST, "suit_chestplate", "chestplateSuit"));
+        suitLeggings = register(r, new ItemArmor(ARMOR_SUIT, EntityEquipmentSlot.LEGS, "suit_leggings", "leggingsSuit"));
+        suitBoots = register(r, new ItemArmor(ARMOR_SUIT, EntityEquipmentSlot.FEET, "suit_boots", "bootsSuit"));
         
-        strawHat = register(new ItemHat(ARMOR_STRAW, "straw_hat", "hatStraw"));
+        strawHat = register(r, new ItemHat(ARMOR_STRAW, "straw_hat", "hatStraw"));
         
         // wands
-        woodenWand = register(new ItemWand("wood_wand", "wandWood", Item.ToolMaterial.WOOD, 1));
-        stoneWand = register(new ItemWand("stone_wand", "wandStone", Item.ToolMaterial.STONE, 1));
-        copperWand = register(new ItemWand("copper_wand", "wandCopper", TOOL_COPPER, 2));
-        bronzeWand = register(new ItemWand("bronze_wand", "wandBronze", TOOL_BRONZE, 2));
-        ironWand = register(new ItemWand("iron_wand", "wandIron", Item.ToolMaterial.IRON, 2));
-        goldWand = register(new ItemWand("gold_wand", "wandGold", Item.ToolMaterial.GOLD, 6));
-        emeraldWand = register(new ItemWand("emerald_wand", "wandEmerald", TOOL_EMERALD, 4));
-        redstoneWand = register(new ItemWand("redstone_wand", "wandRedstone", TOOL_REDSTONE, 5));
-        lapisWand = register(new ItemWand("lapis_wand", "wandLapis", TOOL_LAPIS, 6));
-        diamondWand = register(new ItemWand("diamond_wand", "wandDiamond", Item.ToolMaterial.DIAMOND, 4));
-        silverWand = register(new ItemWand("silver_wand", "wandSilver", TOOL_SILVER, 6));
+        woodenWand = register(r, new ItemWand("wood_wand", "wandWood", Item.ToolMaterial.WOOD, 1));
+        stoneWand = register(r, new ItemWand("stone_wand", "wandStone", Item.ToolMaterial.STONE, 1));
+        copperWand = register(r, new ItemWand("copper_wand", "wandCopper", TOOL_COPPER, 2));
+        bronzeWand = register(r, new ItemWand("bronze_wand", "wandBronze", TOOL_BRONZE, 2));
+        ironWand = register(r, new ItemWand("iron_wand", "wandIron", Item.ToolMaterial.IRON, 2));
+        goldWand = register(r, new ItemWand("gold_wand", "wandGold", Item.ToolMaterial.GOLD, 6));
+        emeraldWand = register(r, new ItemWand("emerald_wand", "wandEmerald", TOOL_EMERALD, 4));
+        redstoneWand = register(r, new ItemWand("redstone_wand", "wandRedstone", TOOL_REDSTONE, 5));
+        lapisWand = register(r, new ItemWand("lapis_wand", "wandLapis", TOOL_LAPIS, 6));
+        diamondWand = register(r, new ItemWand("diamond_wand", "wandDiamond", Item.ToolMaterial.DIAMOND, 4));
+        silverWand = register(r, new ItemWand("silver_wand", "wandSilver", TOOL_SILVER, 6));
         
         // sticks
-        woodenStick = register(new ItemStick("wood_stick", "stickWood", Item.ToolMaterial.WOOD));
-        stoneStick = register(new ItemStick("stone_stick", "stickStone", Item.ToolMaterial.STONE));
-        copperStick = register(new ItemStick("copper_stick", "stickCopper", TOOL_COPPER));
-        bronzeStick = register(new ItemStick("bronze_stick", "stickBronze", TOOL_BRONZE));
-        ironStick = register(new ItemStick("iron_stick", "stickIron", Item.ToolMaterial.IRON));
-        goldStick = register(new ItemStick("gold_stick", "stickGold", Item.ToolMaterial.GOLD));
-        diamondStick = register(new ItemStick("diamond_stick", "stickDiamond", Item.ToolMaterial.DIAMOND));
+        woodenStick = register(r, new ItemStick("wood_stick", "stickWood", Item.ToolMaterial.WOOD));
+        stoneStick = register(r, new ItemStick("stone_stick", "stickStone", Item.ToolMaterial.STONE));
+        copperStick = register(r, new ItemStick("copper_stick", "stickCopper", TOOL_COPPER));
+        bronzeStick = register(r, new ItemStick("bronze_stick", "stickBronze", TOOL_BRONZE));
+        ironStick = register(r, new ItemStick("iron_stick", "stickIron", Item.ToolMaterial.IRON));
+        goldStick = register(r, new ItemStick("gold_stick", "stickGold", Item.ToolMaterial.GOLD));
+        diamondStick = register(r, new ItemStick("diamond_stick", "stickDiamond", Item.ToolMaterial.DIAMOND));
         
         // dagger
-        woodenDagger = register(new ItemDagger("wood_dagger", "daggerWood", Item.ToolMaterial.WOOD));
-        stoneDagger = register(new ItemDagger("stone_dagger", "daggerStone", Item.ToolMaterial.STONE));
-        copperDagger = register(new ItemDagger("copper_dagger", "daggerCopper", TOOL_COPPER));
-        bronzeDagger = register(new ItemDagger("bronze_dagger", "daggerBronze", TOOL_BRONZE));
-        ironDagger = register(new ItemDagger("iron_dagger", "daggerIron", Item.ToolMaterial.IRON));
-        goldDagger = register(new ItemDagger("gold_dagger", "daggerGold", Item.ToolMaterial.GOLD));
-        diamondDagger = register(new ItemDagger("diamond_dagger", "daggerDiamond", Item.ToolMaterial.DIAMOND));
+        woodenDagger = register(r, new ItemDagger("wood_dagger", "daggerWood", Item.ToolMaterial.WOOD));
+        stoneDagger = register(r, new ItemDagger("stone_dagger", "daggerStone", Item.ToolMaterial.STONE));
+        copperDagger = register(r, new ItemDagger("copper_dagger", "daggerCopper", TOOL_COPPER));
+        bronzeDagger = register(r, new ItemDagger("bronze_dagger", "daggerBronze", TOOL_BRONZE));
+        ironDagger = register(r, new ItemDagger("iron_dagger", "daggerIron", Item.ToolMaterial.IRON));
+        goldDagger = register(r, new ItemDagger("gold_dagger", "daggerGold", Item.ToolMaterial.GOLD));
+        diamondDagger = register(r, new ItemDagger("diamond_dagger", "daggerDiamond", Item.ToolMaterial.DIAMOND));
         
         // hammer
-        woodenHammer = register(new ItemHammer("wood_hammer", "hammerWood", Item.ToolMaterial.WOOD));
-        stoneHammer = register(new ItemHammer("stone_hammer", "hammerStone", Item.ToolMaterial.STONE));
-        copperHammer = register(new ItemHammer("copper_hammer", "hammerCopper", TOOL_COPPER));
-        bronzeHammer = register(new ItemHammer("bronze_hammer", "hammerBronze", TOOL_BRONZE));
-        ironHammer = register(new ItemHammer("iron_hammer", "hammerIron", Item.ToolMaterial.IRON));
-        goldHammer = register(new ItemHammer("gold_hammer", "hammerGold", Item.ToolMaterial.GOLD));
-        diamondHammer = register(new ItemHammer("diamond_hammer", "hammerDiamond", Item.ToolMaterial.DIAMOND));
+        woodenHammer = register(r, new ItemHammer("wood_hammer", "hammerWood", Item.ToolMaterial.WOOD));
+        stoneHammer = register(r, new ItemHammer("stone_hammer", "hammerStone", Item.ToolMaterial.STONE));
+        copperHammer = register(r, new ItemHammer("copper_hammer", "hammerCopper", TOOL_COPPER));
+        bronzeHammer = register(r, new ItemHammer("bronze_hammer", "hammerBronze", TOOL_BRONZE));
+        ironHammer = register(r, new ItemHammer("iron_hammer", "hammerIron", Item.ToolMaterial.IRON));
+        goldHammer = register(r, new ItemHammer("gold_hammer", "hammerGold", Item.ToolMaterial.GOLD));
+        diamondHammer = register(r, new ItemHammer("diamond_hammer", "hammerDiamond", Item.ToolMaterial.DIAMOND));
         
         // coins
-        copperCoin = register(new ItemBase("coin_copper", "coinCopper").setCreativeTab(CreativeTabs.MISC));
-        silverCoin = register(new ItemBase("coin_silver", "coinSilver").setCreativeTab(CreativeTabs.MISC));
-        goldCoin = register(new ItemBase("coin_gold", "coinGold").setCreativeTab(CreativeTabs.MISC));
+        copperCoin = register(r, new ItemBase("coin_copper", "coinCopper").setCreativeTab(CreativeTabs.MISC));
+        silverCoin = register(r, new ItemBase("coin_silver", "coinSilver").setCreativeTab(CreativeTabs.MISC));
+        goldCoin = register(r, new ItemBase("coin_gold", "coinGold").setCreativeTab(CreativeTabs.MISC));
         
         // misc
-        scroll = register((ItemScroll) new ItemScroll("scroll", "scroll").setCreativeTab(CreativeTabs.MISC));
-        realHayBed = register(new ItemBed("real_hay_bed", "realHayBed"));
-        hayBundle = register(new ItemBase("hay_bundle", "bundleHay").setCreativeTab(CreativeTabs.MATERIALS));
-        batWing = register(new ItemBase("bat_wing", "batWing").setCreativeTab(CreativeTabs.MATERIALS));
-        wolfFur = register(new ItemBase("wolf_fur", "wolfFur").setCreativeTab(CreativeTabs.MATERIALS));
+        scroll = register(r, (ItemScroll) new ItemScroll("scroll", "scroll").setCreativeTab(CreativeTabs.MISC));
+        realHayBed = register(r, new ItemBed("real_hay_bed", "realHayBed"));
+        hayBundle = register(r, new ItemBase("hay_bundle", "bundleHay").setCreativeTab(CreativeTabs.MATERIALS));
+        batWing = register(r, new ItemBase("bat_wing", "batWing").setCreativeTab(CreativeTabs.MATERIALS));
+        wolfFur = register(r, new ItemBase("wolf_fur", "wolfFur").setCreativeTab(CreativeTabs.MATERIALS));
+    
+        
+        // workaround
+        EnumMetals.fixMetalIngots();
     }
 	
-    private static <T extends Item> T register(T item) 
+    private static <T extends Item> T register(IForgeRegistry<Item> r, T item) 
     {
-        GameRegistry.register(item);
+        r.register(item);
         if(item instanceof ItemModelProvider) 
         {
             ((ItemModelProvider) item).registerItemModel(item);

+ 0 - 216
src/main/java/me/km/items/ModRecipes.java

@@ -1,216 +0,0 @@
-package me.km.items;
-
-import me.km.blocks.EnumMetals;
-import me.km.blocks.ModBlocks;
-import net.minecraft.block.Block;
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.EnumDyeColor;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.crafting.CraftingManager;
-import net.minecraft.item.crafting.FurnaceRecipes;
-
-public class ModRecipes 
-{    
-    public static void init() 
-    {
-	CraftingManager cm = CraftingManager.getInstance();
-        FurnaceRecipes fr = FurnaceRecipes.instance();
-
-        // misc
-        cm.addShapelessRecipe(new ItemStack(ModItems.bronzeIngot, 9), new Object[] 
-        {
-            ModItems.copperIngot, ModItems.copperIngot, ModItems.copperIngot,
-            ModItems.copperIngot, ModItems.copperIngot, ModItems.copperIngot,
-            ModItems.copperIngot, ModItems.copperIngot, ModItems.tinIngot
-        });
-        cm.addRecipe(new ItemStack(ModItems.realHayBed, 3), new Object[] {"XXX", 'X', ModBlocks.realHayBlock});
-        cm.addRecipe(new ItemStack(ModItems.strawHat, 1), new Object[] {" X ", "XXX", 'X', Items.WHEAT});
-        
-        // traps
-        addMetalRecipes(cm, new String[] {" X ", "XXX"}, ModBlocks.spikes, 3);
-        
-        // furnace recipes
-        fr.addSmeltingRecipeForBlock(ModBlocks.copperOre, new ItemStack(ModItems.copperIngot), 0.5f);
-        fr.addSmeltingRecipeForBlock(ModBlocks.tinOre, new ItemStack(ModItems.tinIngot), 1);
-        fr.addSmeltingRecipeForBlock(ModBlocks.silverOre, new ItemStack(ModItems.silverIngot), 1);
-        
-        // armor recipes
-        Item[][] armorItems = new Item[][] 
-        {
-            {ModItems.copperIngot, ModItems.bronzeIngot}, 
-            {ModItems.copperHelmet, ModItems.bronzeHelmet}, 
-            {ModItems.copperChestplate, ModItems.bronzeChestplate}, 
-            {ModItems.copperLeggings, ModItems.bronzeLeggings}, 
-            {ModItems.copperBoots, ModItems.bronzeBoots}
-        };
-        addArmorRecipes(cm, armorItems);
-        
-        // additionel old tool recipes
-        String[][] toolPatterns = new String[][] {{"XXX", " # ", " # "}, {"X", "#", "#"}, {"XX", "X#", " #"}, {"XX", " #", " #"}};
-        Object[][] toolItems = new Object[][] 
-        {
-            {ModItems.copperIngot, ModItems.bronzeIngot}, 
-            {ModItems.copperPickaxe, ModItems.bronzePickaxe}, 
-            {ModItems.copperShovel, ModItems.bronzeShovel}, 
-            {ModItems.copperAxe, ModItems.bronzeAxe}, 
-            {ModItems.copperHoe, ModItems.bronzeHoe}
-        };
-        addToolRecipes(cm, toolPatterns, toolItems);
-        
-        // new tool / weapon recipes
-        toolPatterns = new String[][] {{"X  ", " # ", "  X"}, {" X", "# "}, {"XXX", "X#X", " # "}};
-        toolItems = new Object[][] 
-        {
-            {Blocks.PLANKS, Blocks.COBBLESTONE, Items.IRON_INGOT, Items.DIAMOND, 
-                Items.GOLD_INGOT, ModItems.copperIngot, ModItems.bronzeIngot}, 
-            {ModItems.woodenStick, ModItems.stoneStick, ModItems.ironStick, ModItems.diamondStick, 
-                ModItems.goldStick, ModItems.copperStick, ModItems.bronzeStick}, 
-            {ModItems.woodenDagger, ModItems.stoneDagger, ModItems.ironDagger, ModItems.diamondDagger, 
-                ModItems.goldDagger, ModItems.copperDagger, ModItems.bronzeDagger}, 
-            {ModItems.woodenHammer, ModItems.stoneHammer, ModItems.ironHammer, ModItems.diamondHammer, 
-                ModItems.goldHammer, ModItems.copperHammer, ModItems.bronzeHammer}, 
-        };
-        addToolRecipes(cm, toolPatterns, toolItems);
-        
-        // wands
-        toolPatterns = new String[][] {{" #X", " ##", "#  "}};
-        toolItems = new Object[][] 
-        {
-            {Blocks.PLANKS, Blocks.COBBLESTONE, Items.IRON_INGOT, Items.DIAMOND, Items.GOLD_INGOT, 
-                ModItems.copperIngot, ModItems.bronzeIngot, Items.EMERALD, Items.REDSTONE, 
-                new ItemStack(Items.DYE, 1, EnumDyeColor.BLUE.getDyeDamage()), ModItems.silverIngot}, 
-            {ModItems.woodenWand, ModItems.stoneWand, ModItems.ironWand, ModItems.diamondWand, ModItems.goldWand, 
-                ModItems.copperWand, ModItems.bronzeWand, ModItems.emeraldWand, ModItems.redstoneWand,
-                ModItems.lapisWand, ModItems.silverWand}, 
-        };
-        addToolRecipes(cm, toolPatterns, toolItems);
-        
-        // additionel old weapon recipes
-        Object[][] weaponItems = new Object[][] 
-        {
-            {ModItems.copperIngot, ModItems.bronzeIngot}, 
-            {ModItems.copperSword, ModItems.bronzeSword}
-        };
-        addWeaponRecipes(cm, weaponItems);
-        
-        // block <-> parts <-> smaller parts recipes
-        Object[][] ingotItems = new Object[][] 
-        {
-            {ModBlocks.copperBlock, new ItemStack(ModItems.copperIngot, 9)}, 
-            {ModItems.copperIngot, new ItemStack(ModItems.copperNugget, 9)}, 
-            {ModBlocks.tinBlock, new ItemStack(ModItems.tinIngot, 9)}, 
-            {ModItems.tinIngot, new ItemStack(ModItems.tinNugget, 9)}, 
-            {ModBlocks.bronzeBlock, new ItemStack(ModItems.bronzeIngot, 9)}, 
-            {ModItems.bronzeIngot, new ItemStack(ModItems.bronzeNugget, 9)}, 
-            {ModBlocks.silverBlock, new ItemStack(ModItems.silverIngot, 9)}, 
-            {ModItems.silverIngot, new ItemStack(ModItems.silverNugget, 9)}, 
-            {ModBlocks.realHayBlock, new ItemStack(ModItems.hayBundle, 9)}, 
-        };
-        addIngotRecipes(cm, ingotItems);
-
-        addNuggetRecipes(fr, toolItems, armorItems, weaponItems, ModItems.copperNugget, ModItems.bronzeNugget);
-    }
-
-    private static void addArmorRecipes(CraftingManager cm, Item[][] armorItems)
-    {
-        String[][] armorPatterns = new String[][] {{"XXX", "X X"}, {"X X", "XXX", "XXX"}, {"XXX", "X X", "X X"}, {"X X", "X X"}};
-        for (int i = 0; i < armorItems[0].length; ++i)
-        {
-            Item item = armorItems[0][i];
-
-            for (int j = 0; j < armorItems.length - 1; ++j)
-            {
-                Item item2 = armorItems[j + 1][i];
-                cm.addRecipe(new ItemStack(item2), new Object[] {armorPatterns[j], 'X', item});
-            }
-        }
-    }
-    
-    private static void addToolRecipes(CraftingManager cm, String[][] toolPatterns, Object[][] toolItems)
-    {       
-        for(int i = 0; i < toolItems[0].length; ++i)
-        {
-            Object object = toolItems[0][i];
-
-            for(int j = 0; j < toolItems.length - 1; ++j)
-            {
-                Item item = (Item) toolItems[j + 1][i];
-                cm.addRecipe(new ItemStack(item), new Object[] {toolPatterns[j], '#', Items.STICK, 'X', object});
-            }
-        }
-    }
-    
-    private static void addWeaponRecipes(CraftingManager cm, Object[][] weaponItems)
-    {
-        String[][] weaponPatterns = new String[][] {{"X", "X", "#"}};
-        for(int i = 0; i < weaponItems[0].length; ++i)
-        {
-            Object object = weaponItems[0][i];
-            for(int j = 0; j < weaponItems.length - 1; ++j)
-            {
-                Item item = (Item) weaponItems[j + 1][i];
-                cm.addRecipe(new ItemStack(item), new Object[] {weaponPatterns[j], '#', Items.STICK, 'X', object});
-            }
-        }
-    }
-
-    private static void addIngotRecipes(CraftingManager cm, Object[][] ingotItems)
-    {
-        for(Object[] aobject : ingotItems)
-        {
-            try
-            {
-                Item block = (Item) aobject[0];
-                ItemStack parts = (ItemStack) aobject[1];
-                ItemStack ingot = parts.copy();
-                ingot.setCount(1);
-                cm.addRecipe(new ItemStack(block), new Object[] {"###", "###", "###", '#', ingot});
-                cm.addRecipe(parts, new Object[] {"#", '#', block});
-            }
-            catch(ClassCastException ex)
-            {
-                Block block = (Block) aobject[0];
-                ItemStack parts = (ItemStack) aobject[1];
-                ItemStack ingot = parts.copy();
-                ingot.setCount(1);
-                cm.addRecipe(new ItemStack(block), new Object[] {"###", "###", "###", '#', ingot});
-                cm.addRecipe(parts, new Object[] {"#", '#', block});
-            }
-        }
-    }
-    
-    private static void addNuggetRecipes(FurnaceRecipes fr, Object[][] toolItems, Item[][] armorItems, Object[][] weaponItems, Item... nuggets)
-    {
-        for(int i = 0; i < nuggets.length; i++)
-        {
-            for(int j = 1; j < toolItems.length; j++)
-            {
-                fr.addSmelting((Item) toolItems[j][i], new ItemStack(nuggets[i]), 0.1f);
-            }
-            for(int j = 1; j < armorItems.length; j++)
-            {
-                fr.addSmelting((Item) armorItems[j][i], new ItemStack(nuggets[i]), 0.1f);
-            }
-            for(int j = 1; j < weaponItems.length; j++)
-            {
-                fr.addSmelting((Item) weaponItems[j][i], new ItemStack(nuggets[i]), 0.1f);
-            }
-        }
-    }
-    
-    private static void addMetalRecipes(CraftingManager cm, String[] patterns, Item output, int amount)
-    {
-        for(EnumMetals metal : EnumMetals.values())
-        {
-            cm.addRecipe(new ItemStack(output, amount, metal.getMetadata()), 
-                    new Object[] {patterns, 'X', metal.getMetalIngot()});
-        }
-    }
-    
-    private static void addMetalRecipes(CraftingManager cm, String[] patterns, Block output, int amount)
-    {
-        addMetalRecipes(cm, patterns, Item.getItemFromBlock(output), amount);
-    }
-}

+ 5 - 4
src/main/java/me/km/nms/NmsUtilities.java

@@ -19,6 +19,7 @@ import net.minecraft.network.play.server.SPacketChat;
 import net.minecraft.tileentity.TileEntity;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.Vec3d;
+import net.minecraft.util.text.ChatType;
 import net.minecraft.util.text.Style;
 import net.minecraft.util.text.TextComponentString;
 import net.minecraft.util.text.TextFormatting;
@@ -44,7 +45,7 @@ public class NmsUtilities
 
     public static void walkTo(EntityLiving liv, Vec3d v, double speed)
     {
-        liv.getMoveHelper().setMoveTo(v.xCoord, v.yCoord, v.zCoord, speed);
+        liv.getMoveHelper().setMoveTo(v.x, v.y, v.z, speed);
     }
     
     public static void canDestroyBlocks(EntityLiving liv)
@@ -65,14 +66,14 @@ public class NmsUtilities
         {
             NBTTagCompound nbt = JsonToNBT.getTagFromJson(s);
             Vec3d v = l.getPos();
-            Entity ent = AnvilChunkLoader.readWorldEntityPos(nbt, l.getWorld(), v.xCoord, v.yCoord, v.zCoord, true);
+            Entity ent = AnvilChunkLoader.readWorldEntityPos(nbt, l.getWorld(), v.x, v.y, v.z, true);
             if(ent == null)
             {
                 return null;
             }
             else
             {
-                ent.setLocationAndAngles(v.xCoord, v.yCoord, v.zCoord, ent.rotationYaw, ent.rotationPitch);
+                ent.setLocationAndAngles(v.x, v.y, v.z, ent.rotationYaw, ent.rotationPitch);
                 if(ent instanceof EntityLiving)
                 {
                     ((EntityLiving) ent).onInitialSpawn(ent.getEntityWorld().getDifficultyForLocation(new BlockPos(ent)), null);
@@ -259,6 +260,6 @@ public class NmsUtilities
     
     public static void sendActionBar(EntityPlayerMP p, String message) 
     {
-        p.connection.sendPacket(new SPacketChat(new TextComponentString(message), (byte) 2));
+        p.connection.sendPacket(new SPacketChat(new TextComponentString(message), ChatType.GAME_INFO));
     }
 }

+ 12 - 12
src/main/java/me/km/playerbank/ModDedicatedPlayerList.java

@@ -30,6 +30,7 @@ import net.minecraft.network.play.server.SPacketSpawnPosition;
 import net.minecraft.scoreboard.ServerScoreboard;
 import net.minecraft.server.dedicated.DedicatedPlayerList;
 import net.minecraft.server.dedicated.DedicatedServer;
+import net.minecraft.server.management.DemoPlayerInteractionManager;
 import net.minecraft.server.management.PlayerInteractionManager;
 import net.minecraft.server.management.PlayerProfileCache;
 import net.minecraft.util.math.BlockPos;
@@ -39,7 +40,6 @@ import net.minecraft.world.GameRules;
 import net.minecraft.world.World;
 import net.minecraft.world.WorldServer;
 import net.minecraft.world.chunk.storage.AnvilChunkLoader;
-import net.minecraft.world.demo.DemoWorldManager;
 import net.minecraft.world.storage.WorldInfo;
 import net.minecraftforge.common.MinecraftForge;
 import net.minecraftforge.fml.relauncher.Side;
@@ -91,11 +91,11 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
         // read data
         NBTTagCompound nbttagcompound = this.readPlayerDataFromFile(p);
         
-        WorldServer playerWorld = this.mcServer.worldServerForDimension(p.dimension);
+        WorldServer playerWorld = this.mcServer.getWorld(p.dimension);
         if(playerWorld == null)
         {
             p.dimension = 0;
-            playerWorld = this.mcServer.worldServerForDimension(0);
+            playerWorld = this.mcServer.getWorld(0);
             BlockPos spawnPoint = playerWorld.provider.getRandomizedSpawnPoint();
             p.setPosition(spawnPoint.getX(), spawnPoint.getY(), spawnPoint.getZ());
         }
@@ -123,7 +123,7 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
         nethandlerplayserver.sendPacket(new SPacketHeldItemChange(p.inventory.currentItem));
         this.updatePermissionLevel(p);
         p.getStatFile().markAllDirty();
-        p.getStatFile().sendAchievements(p);
+        p.getRecipeBook().init(p);
         this.sendScoreboard((ServerScoreboard) playerWorld.getScoreboard(), p);
         this.mcServer.refreshStatusNextTick();
         // Custom Join Message - Start
@@ -210,7 +210,7 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
     public EntityPlayerMP recreatePlayerEntity(EntityPlayerMP p, int dim, boolean conqueredEnd)
     {
         dim = p.dimension;
-        WorldServer w = mcServer.worldServerForDimension(dim);
+        WorldServer w = mcServer.getWorld(dim);
         if(w == null)
         {
             dim = p.getSpawnDimension();
@@ -219,7 +219,7 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
         {
             dim = w.provider.getRespawnDimension(p);
         }
-        if(mcServer.worldServerForDimension(dim) == null)
+        if(mcServer.getWorld(dim) == null)
         {
             dim = 0;
         }
@@ -233,14 +233,14 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
         
         // start of event handling
         // determine would-be spawn
-        w = mcServer.worldServerForDimension(dim);
+        w = mcServer.getWorld(dim);
         p.dimension = dim;
 
         PlayerInteractionManager pManager;
         // keep this demo shit for fucks sake
         if(this.mcServer.isDemo())
         {
-            pManager = new DemoWorldManager(w);
+            pManager = new DemoPlayerInteractionManager(w);
         }
         else
         {
@@ -285,13 +285,13 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
             newP.world = w;
             newP.dimension = w.provider.getDimension();
             p.dimension = newP.dimension;
-            newP.setPosition(v.xCoord, v.yCoord, v.zCoord);
+            newP.setPosition(v.x, v.y, v.z);
         }
         else
         {
             if(spawnInBed)
             {
-                newP.setLocationAndAngles(v.xCoord, v.yCoord, v.zCoord, 0, 0);
+                newP.setLocationAndAngles(v.x, v.y, v.z, 0, 0);
                 newP.setSpawnPoint(bed, p.isSpawnForced(dim));
             }
             else if(errorIfNoForce)
@@ -305,12 +305,12 @@ public class ModDedicatedPlayerList extends DedicatedPlayerList
             GameRules rules = w.getGameRules();
             boolean keep = rules.getBoolean("keepInventory");
             rules.setOrCreateGameRule("keepInventory", "true");
-            newP.clonePlayer(p, conqueredEnd);
+            newP.copyFrom(p, conqueredEnd);
             rules.setOrCreateGameRule("keepInventory", String.valueOf(keep));
         }
         else
         {
-            newP.clonePlayer(p, conqueredEnd);
+            newP.copyFrom(p, conqueredEnd);
         }
 
         // end of event handling

+ 1 - 2
src/main/java/me/km/playerbank/PvpEvent.java

@@ -5,7 +5,6 @@ import me.km.api.Module;
 import me.km.api.ModuleListener;
 import me.km.api.Utils;
 import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.util.DamageSource;
 import net.minecraftforge.event.entity.living.LivingAttackEvent;
 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
 
@@ -21,7 +20,7 @@ public class PvpEvent extends ModuleListener
     {      
         if(!(e.getEntityLiving() instanceof EntityPlayer) ||
             !KajetansMod.worldManager.getWorldPreferences(e.getEntity().world).pvpProtection || 
-            !(e.getSource().getSourceOfDamage() instanceof EntityPlayer))
+            !(e.getSource().getImmediateSource()instanceof EntityPlayer))
         {
             return;
         }

+ 1 - 2
src/main/java/me/km/plots/ProtectionEntity.java

@@ -3,7 +3,6 @@ package me.km.plots;
 import me.km.KajetansMod;
 import me.km.api.Module;
 import me.km.api.Utils;
-import me.km.permissions.PermissionManager;
 import me.km.permissions.Permissions;
 import net.minecraft.entity.EntityLivingBase;
 import net.minecraft.entity.passive.EntityAnimal;
@@ -40,7 +39,7 @@ public class ProtectionEntity extends Protection
             return;
         } 
         
-        if(e.getSource().getSourceOfDamage() != null)
+        if(e.getSource().getImmediateSource() != null)
         {
             EntityPlayer p = Utils.getDamager(e.getSource());
             if(p != null)

+ 347 - 0
src/main/java/me/km/recipes/ModRecipes.java

@@ -0,0 +1,347 @@
+package me.km.recipes;
+
+import java.util.HashMap;
+import me.km.blocks.EnumMetals;
+import me.km.blocks.ModBlocks;
+import me.km.items.ModItems;
+import net.minecraft.block.Block;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.EnumDyeColor;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.crafting.FurnaceRecipes;
+import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.item.crafting.Ingredient;
+import net.minecraft.item.crafting.ShapedRecipes;
+import net.minecraft.item.crafting.ShapelessRecipes;
+import net.minecraft.util.NonNullList;
+import net.minecraftforge.registries.IForgeRegistry;
+
+public class ModRecipes 
+{           
+    // -----------------------------------------------------------------------------------
+    // shaped recipe construction stuff
+    // -----------------------------------------------------------------------------------
+    
+    private static ShapedRecipes newShapedRecipe(String group, String[] pattern, ItemStack result, char[] chars, ItemStack[][] stacks)
+    {
+        HashMap<Character, Ingredient> map = getPatternMap(chars, stacks);
+        NonNullList<Ingredient> nonnulllist = getIngredientList(pattern, map);
+        return new ShapedRecipes(group, pattern[0].length(), pattern.length, nonnulllist, result);
+    }
+    
+    private static HashMap<Character, Ingredient> getPatternMap(char[] chars, ItemStack[][] stacks)
+    {
+        HashMap<Character, Ingredient> map = new HashMap<>();
+        for(int i = 0; i < chars.length; i++)
+        {
+            map.put(chars[i], Ingredient.fromStacks(copyItemStack(stacks[i])));
+        }
+        map.put(' ', Ingredient.EMPTY);
+        return map;
+    }
+    
+    private static NonNullList<Ingredient> getIngredientList(String[] pattern, HashMap<Character, Ingredient> map)
+    {
+        int w = pattern[0].length();
+        NonNullList<Ingredient> nonnulllist = NonNullList.<Ingredient>withSize(w * pattern.length, Ingredient.EMPTY);
+        for(int i = 0; i < pattern.length; i++)
+        {
+            for (int j = 0; j < pattern[i].length(); j++)
+            {
+                nonnulllist.set(j + w * i, map.get(pattern[i].charAt(j)));
+            }
+        }
+        return nonnulllist;
+    }
+    
+    private static void registerShaped(IForgeRegistry<IRecipe> r, String group, String[] pattern, ItemStack result, char[] chars, ItemStack[][] stacks)
+    {
+        ShapedRecipes recipe = newShapedRecipe(group, pattern, result, chars, stacks);
+        recipe.setRegistryName(buildRegistryName(result));
+        r.register(recipe);
+    }
+    
+    private static ShapelessRecipes newShapelessRecipe(String group, ItemStack result, ItemStack[][] stacks)
+    {
+        NonNullList<Ingredient> nonnulllist = NonNullList.<Ingredient>withSize(stacks.length, Ingredient.EMPTY);
+        for(int i = 0; i < stacks.length; i++)
+        {
+            nonnulllist.set(i, Ingredient.fromStacks(copyItemStack(stacks[i])));
+        }
+        return new ShapelessRecipes(group, result, nonnulllist);
+    }
+    
+    private static void registerShapeless(IForgeRegistry<IRecipe> r, String group, ItemStack result, ItemStack[][] stacks)
+    {
+        ShapelessRecipes recipe = newShapelessRecipe(group, result, stacks);
+        recipe.setRegistryName(buildRegistryName(result));
+        r.register(recipe);
+    }
+    
+    private static void registerShapeless(IForgeRegistry<IRecipe> r, String group, ItemStack result, Item[] items)
+    {
+        ItemStack[][] stacks = new ItemStack[items.length][1];
+        for(int i = 0; i < items.length; i++)
+        {
+            stacks[i][0] = new ItemStack(items[i]);
+        }
+        registerShapeless(r, group, result, stacks);
+    }
+    
+    private static ItemStack[] copyItemStack(ItemStack[] stacks)
+    {
+        ItemStack[] copyStacks = new ItemStack[stacks.length];
+        for(int i = 0; i < copyStacks.length; i++)
+        {
+            copyStacks[i] = stacks[i].copy();
+        }
+        return copyStacks;
+    }
+    
+    private static String buildRegistryName(ItemStack stack)
+    {
+        if(stack.getMetadata() != 0)
+        {
+            return stack.getItem().getRegistryName().getResourcePath() + "_" + stack.getMetadata();
+        }
+        return stack.getItem().getRegistryName().getResourcePath();
+    }
+    
+    // -----------------------------------------------------------------------------------
+    // init recipes
+    // -----------------------------------------------------------------------------------
+    
+    public static void init(IForgeRegistry<IRecipe> r) 
+    {
+        FurnaceRecipes fr = FurnaceRecipes.instance();        
+        
+        // misc
+        registerShapeless(r, "", new ItemStack(ModItems.bronzeIngot, 9), new Item[] 
+        {
+            ModItems.copperIngot, ModItems.copperIngot, ModItems.copperIngot,
+            ModItems.copperIngot, ModItems.copperIngot, ModItems.copperIngot,
+            ModItems.copperIngot, ModItems.copperIngot, ModItems.tinIngot
+        });
+        registerShaped(r, "", new String[] {"XXX"}, new ItemStack(ModItems.realHayBed, 3), 
+                new char[] {'X'}, new ItemStack[][] {{new ItemStack(ModBlocks.realHayBlock)}});
+        registerShaped(r, "", new String[] {" X ", "XXX"}, new ItemStack(ModItems.strawHat), 
+                new char[] {'X'}, new ItemStack[][] {{new ItemStack(Items.WHEAT)}});
+        
+        // traps
+        addMetalRecipes(r, "", new String[] {" X ", "XXX"}, ModBlocks.spikes, 3);
+        
+        // furnace recipes
+        fr.addSmeltingRecipeForBlock(ModBlocks.copperOre, new ItemStack(ModItems.copperIngot), 0.5f);
+        fr.addSmeltingRecipeForBlock(ModBlocks.tinOre, new ItemStack(ModItems.tinIngot), 1);
+        fr.addSmeltingRecipeForBlock(ModBlocks.silverOre, new ItemStack(ModItems.silverIngot), 1);
+        
+        // armor recipes
+        Item[][] armorItems = new Item[][] 
+        {
+            {ModItems.copperIngot, ModItems.bronzeIngot}, 
+            {ModItems.copperHelmet, ModItems.bronzeHelmet}, 
+            {ModItems.copperChestplate, ModItems.bronzeChestplate}, 
+            {ModItems.copperLeggings, ModItems.bronzeLeggings}, 
+            {ModItems.copperBoots, ModItems.bronzeBoots}
+        };
+        addArmorRecipes(r, armorItems);
+        
+        // additionel old tool recipes
+        String[][] toolPatterns = new String[][] 
+        {
+            {"XXX", " # ", " # "}, 
+            {"X", "#", "#"}, 
+            {"XX", "X#", " #"}, 
+            {"XX", " #", " #"},
+            {"X", "X", "#"}
+        };
+        Object[][] toolItems = new Object[][] 
+        {
+            {ModItems.copperIngot, ModItems.bronzeIngot}, 
+            {ModItems.copperPickaxe, ModItems.bronzePickaxe}, 
+            {ModItems.copperShovel, ModItems.bronzeShovel}, 
+            {ModItems.copperAxe, ModItems.bronzeAxe}, 
+            {ModItems.copperHoe, ModItems.bronzeHoe},
+            {ModItems.copperSword, ModItems.bronzeSword}
+        };
+        addToolRecipes(r, toolPatterns, toolItems);
+        
+        // new tool / weapon recipes
+        toolPatterns = new String[][] {{"X  ", " # ", "  X"}, {" X", "# "}, {"XXX", "X#X", " # "}};
+        toolItems = new Object[][]
+        {
+            {Blocks.PLANKS, Blocks.COBBLESTONE, Items.IRON_INGOT, Items.DIAMOND, 
+                Items.GOLD_INGOT, ModItems.copperIngot, ModItems.bronzeIngot}, 
+            {ModItems.woodenStick, ModItems.stoneStick, ModItems.ironStick, ModItems.diamondStick, 
+                ModItems.goldStick, ModItems.copperStick, ModItems.bronzeStick}, 
+            {ModItems.woodenDagger, ModItems.stoneDagger, ModItems.ironDagger, ModItems.diamondDagger, 
+                ModItems.goldDagger, ModItems.copperDagger, ModItems.bronzeDagger}, 
+            {ModItems.woodenHammer, ModItems.stoneHammer, ModItems.ironHammer, ModItems.diamondHammer, 
+                ModItems.goldHammer, ModItems.copperHammer, ModItems.bronzeHammer}, 
+        };
+        addToolRecipes(r, toolPatterns, toolItems);
+        
+        // wands
+        toolPatterns = new String[][] {{" #X", " ##", "#  "}};
+        toolItems = new Object[][] 
+        {
+            {Blocks.PLANKS, Blocks.COBBLESTONE, Items.IRON_INGOT, Items.DIAMOND, Items.GOLD_INGOT, 
+                ModItems.copperIngot, ModItems.bronzeIngot, Items.EMERALD, Items.REDSTONE, 
+                new ItemStack(Items.DYE, 1, EnumDyeColor.BLUE.getDyeDamage()), ModItems.silverIngot}, 
+            {ModItems.woodenWand, ModItems.stoneWand, ModItems.ironWand, ModItems.diamondWand, ModItems.goldWand, 
+                ModItems.copperWand, ModItems.bronzeWand, ModItems.emeraldWand, ModItems.redstoneWand,
+                ModItems.lapisWand, ModItems.silverWand}, 
+        };
+        addToolRecipes(r, toolPatterns, toolItems);
+
+        // block <-> parts <-> smaller parts recipes
+        Object[][] ingotItems = new Object[][] 
+        {
+            {ModBlocks.copperBlock, new ItemStack(ModItems.copperIngot, 9)}, 
+            {ModItems.copperIngot, new ItemStack(ModItems.copperNugget, 9)}, 
+            {ModBlocks.tinBlock, new ItemStack(ModItems.tinIngot, 9)}, 
+            {ModItems.tinIngot, new ItemStack(ModItems.tinNugget, 9)}, 
+            {ModBlocks.bronzeBlock, new ItemStack(ModItems.bronzeIngot, 9)}, 
+            {ModItems.bronzeIngot, new ItemStack(ModItems.bronzeNugget, 9)}, 
+            {ModBlocks.silverBlock, new ItemStack(ModItems.silverIngot, 9)}, 
+            {ModItems.silverIngot, new ItemStack(ModItems.silverNugget, 9)}, 
+            {ModBlocks.realHayBlock, new ItemStack(ModItems.hayBundle, 9)}, 
+        };
+        addIngotRecipes(r, ingotItems);
+
+        addNuggetRecipes(fr, toolItems, armorItems, ModItems.copperNugget, ModItems.bronzeNugget);
+    }
+
+    // -----------------------------------------------------------------------------------
+    // recipe helper
+    // -----------------------------------------------------------------------------------
+    
+    private static void addArmorRecipes(IForgeRegistry<IRecipe> r, Item[][] armorItems)
+    {
+        String[][] armorPatterns = new String[][] 
+        {
+            {"XXX", "X X"}, 
+            {"X X", "XXX", "XXX"}, 
+            {"XXX", "X X", "X X"}, 
+            {"X X", "X X"}
+        };
+        char[] chars = new char[] {'X'};
+        ItemStack[][] stacks = new ItemStack[][] {{ItemStack.EMPTY}};
+        
+        for (int i = 0; i < armorItems[0].length; ++i)
+        {
+            stacks[0][0] = new ItemStack(armorItems[0][i]);
+            for (int j = 0; j < armorItems.length - 1; ++j)
+            {
+                registerShaped(r, "", armorPatterns[j], new ItemStack(armorItems[j + 1][i]), chars, stacks);
+            }
+        }
+    }
+    
+    private static void addToolRecipes(IForgeRegistry<IRecipe> r, String[][] toolPatterns, Object[][] toolItems)
+    {       
+        char[] chars = new char[] {'#', 'X'};
+        ItemStack[][] stacks = new ItemStack[][] {{new ItemStack(Items.STICK)} , {ItemStack.EMPTY}};
+        
+        for(int i = 0; i < toolItems[0].length; ++i)
+        {
+            Object object = toolItems[0][i];
+            if(object instanceof Item)
+            {
+                stacks[1][0] = new ItemStack((Item) toolItems[0][i]);
+            }
+            else if(object instanceof Block)
+            {
+                Block b = (Block) toolItems[0][i];
+                NonNullList<ItemStack> list = NonNullList.<ItemStack>create();               
+                b.getSubBlocks(CreativeTabs.BUILDING_BLOCKS, list);
+                stacks[1] = new ItemStack[list.size()];
+                for(int k = 0; k < list.size(); k++)
+                {
+                    stacks[1][k] = list.get(k);
+                }
+            }
+            else if(object instanceof ItemStack)
+            {
+                stacks[1][0] = (ItemStack) toolItems[0][i];
+            }
+            else
+            {
+                throw new IllegalArgumentException("only blocks or items are allowed");
+            }
+            for(int j = 0; j < toolItems.length - 1; ++j)
+            {
+                registerShaped(r, "", toolPatterns[j], new ItemStack((Item) toolItems[j + 1][i]), chars, stacks);
+            }
+        }
+    }
+
+    private static void addIngotRecipes(IForgeRegistry<IRecipe> r, Object[][] ingotItems)
+    {
+        String[] blockPattern = new String[] {"###", "###", "###"};
+        String[] ingotPattern = new String[] {"#"};
+        char[] chars = new char[] {'#'};
+        ItemStack[][] stacks = new ItemStack[][] {{ItemStack.EMPTY}};
+        
+        for(Object[] aobject : ingotItems)
+        {
+            try
+            {
+                Item block = (Item) aobject[0];
+                ItemStack parts = (ItemStack) aobject[1];
+                ItemStack ingot = parts.copy();
+                ingot.setCount(1);
+                stacks[0][0] = ingot;
+                registerShaped(r, "", blockPattern, new ItemStack(block), chars, stacks);
+                stacks[0][0] = new ItemStack(block);
+                registerShaped(r, "", ingotPattern, parts, chars, stacks);
+            }
+            catch(ClassCastException ex)
+            {
+                Block block = (Block) aobject[0];
+                ItemStack parts = (ItemStack) aobject[1];
+                ItemStack ingot = parts.copy();
+                ingot.setCount(1);
+                stacks[0][0] = ingot;
+                registerShaped(r, "", blockPattern, new ItemStack(block), chars, stacks);
+                stacks[0][0] = new ItemStack(block);
+                registerShaped(r, "", ingotPattern, parts, chars, stacks);
+            }
+        }
+    }
+    
+    private static void addNuggetRecipes(FurnaceRecipes fr, Object[][] toolItems, Item[][] armorItems, Item... nuggets)
+    {
+        for(int i = 0; i < nuggets.length; i++)
+        {
+            for(int j = 1; j < toolItems.length; j++)
+            {
+                fr.addSmelting((Item) toolItems[j][i], new ItemStack(nuggets[i]), 0.1f);
+            }
+            for(int j = 1; j < armorItems.length; j++)
+            {
+                fr.addSmelting((Item) armorItems[j][i], new ItemStack(nuggets[i]), 0.1f);
+            }
+        }
+    }
+    
+    private static void addMetalRecipes(IForgeRegistry<IRecipe> r, String group, String[] pattern, Item output, int amount)
+    {
+        char[] chars = new char[] {'X'};
+        ItemStack[][] stacks = new ItemStack[][] {{ItemStack.EMPTY}};
+        
+        for(EnumMetals metal : EnumMetals.values())
+        {
+            stacks[0][0] = new ItemStack(metal.getMetalIngot());       
+            registerShaped(r, group, pattern, new ItemStack(output, amount, metal.getMetadata()), chars, stacks);
+        }
+    }
+    
+    private static void addMetalRecipes(IForgeRegistry<IRecipe> r, String group, String[] patterns, Block output, int amount)
+    {
+        addMetalRecipes(r, group, patterns, Item.getItemFromBlock(output), amount);
+    }
+}

+ 3 - 0
src/main/java/me/km/scheduler/SnuviScheduler.java

@@ -9,7 +9,10 @@ import java.util.concurrent.TimeUnit;
 import me.hammerle.code.ISnuviScheduler;
 import me.km.api.Module;
 import net.minecraft.util.text.TextFormatting;
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
 
+@SideOnly(Side.SERVER)
 public class SnuviScheduler extends Module implements ISnuviScheduler
 {
     private boolean checker;

+ 28 - 15
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -230,14 +230,14 @@ public class MinecraftFunctions implements ISnuviLogger
         // -------------------------------------------------------------    
         // Custom-Bibliothek
         // -------------------------------------------------------------
-        parser.registerConsumer("custom.registershapelessrecipe", (args, qd) -> 
+        /*parser.registerConsumer("custom.registershapelessrecipe", (args, qd) -> 
                 registerShapelessRecipe(args));
         parser.registerConsumer("custom.registershapedrecipe", (args, qd) -> 
                 registerShapedRecipe(args));
         parser.registerConsumer("custom.registerfurnacerecipe", (args, qd) ->
                 RecipeUtils.registerFurnaceRecipe((ItemStack) args[0], (ItemStack) args[1]));
         parser.registerConsumer("custom.clearrecipes", (args, qd) ->
-                RecipeUtils.clearRecipes());
+                RecipeUtils.clearRecipes());*/
         
         
         // -------------------------------------------------------------    
@@ -664,9 +664,25 @@ public class MinecraftFunctions implements ISnuviLogger
     {
         if(KajetansMod.debugMode || KajetansMod.scripts.getSnuviParser().printStack)
         {
-            printConsoleException(ex);
+            printConsoleException(ex, null);
         }
         sendToDevsWithSuffix("§cError in '" + ex.getScriptName() + "'");
+        printGeneralException(ex);
+    }
+    
+    @Override
+    public void printException(SnuviException ex, Script sc)
+    {
+        if(KajetansMod.debugMode || KajetansMod.scripts.getSnuviParser().printStack)
+        {
+            printConsoleException(ex, sc);
+        }
+        sendToDevsWithSuffix("§cError in '" + sc.getName()+ "'");
+        printGeneralException(ex);
+    }
+    
+    private void printGeneralException(SnuviException ex)
+    {
         if(ex.getCode() != null)
         {
             ArrayList<String> list = ex.getWholeCode();
@@ -707,10 +723,10 @@ public class MinecraftFunctions implements ISnuviLogger
         }
     }
     
-    public void printConsoleException(SnuviException ex)
+    public void printConsoleException(SnuviException ex, Script sc)
     {
         Module m = KajetansMod.scripts;
-        m.sendWarningToConsole("Error in '" + ex.getScriptName() + "'");
+        m.sendWarningToConsole("Error in '" + (sc == null ? ex.getScriptName() : sc.getName()) + "'");
         if(ex.getCode() != null)
         {
             ArrayList<String> list = ex.getWholeCode();
@@ -971,7 +987,7 @@ public class MinecraftFunctions implements ISnuviLogger
     {
         Location l = ((Location) args[0]);
         Vec3d v = l.getPos();
-        EffectUtils.playSound((WorldServer) l.getWorld(), SoundEvent.REGISTRY.getObject(new ResourceLocation(args[1].toString())), SoundCategory.MASTER, v.xCoord, v.yCoord, v.zCoord);
+        EffectUtils.playSound((WorldServer) l.getWorld(), SoundEvent.REGISTRY.getObject(new ResourceLocation(args[1].toString())), SoundCategory.MASTER, v.x, v.y, v.z);
     }
     
     private static void playSoundPlayer(Object[] args) throws IllegalStringLocationException
@@ -1154,12 +1170,9 @@ public class MinecraftFunctions implements ISnuviLogger
         Vec3d l1 = ((Location) args[0]).getPos();
         Vec3d l2 = ((Location) args[1]).getPos();
         Vec3d l3 = ((Location) args[2]).getPos();
-        return l1.xCoord >= Math.min(l2.xCoord, l3.xCoord) &&
-                l1.xCoord <= Math.max(l2.xCoord, l3.xCoord) &&
-                l1.yCoord >= Math.min(l2.yCoord, l3.yCoord) &&
-                l1.yCoord <= Math.max(l2.yCoord, l3.yCoord) &&
-                l1.zCoord >= Math.min(l2.zCoord, l3.zCoord) &&
-                l1.zCoord <= Math.max(l2.zCoord, l3.zCoord);
+        return l1.x >= Math.min(l2.x, l3.x) && l1.x <= Math.max(l2.x, l3.x) &&
+                l1.y >= Math.min(l2.y, l3.y) && l1.y <= Math.max(l2.y, l3.y) &&
+                l1.z >= Math.min(l2.z, l3.z) && l1.z <= Math.max(l2.z, l3.z);
     }
 
     private static void addPlot(Object[] args)
@@ -1184,7 +1197,7 @@ public class MinecraftFunctions implements ISnuviLogger
         {
             return null;
         }
-        return ds.getSourceOfDamage();
+        return ds.getImmediateSource();
     }
     
     @SuppressWarnings("")
@@ -1309,7 +1322,7 @@ public class MinecraftFunctions implements ISnuviLogger
     // Custom-Handler
     // ------------------------------------------------------------------------- 
     
-    private static void registerShapelessRecipe(Object[] args)
+    /*private static void registerShapelessRecipe(Object[] args)
     {
         ItemStack[] stacks = new ItemStack[args.length - 1];
         for(int i = 0; i < stacks.length; i++)
@@ -1338,7 +1351,7 @@ public class MinecraftFunctions implements ISnuviLogger
             stacks[i] = (ItemStack) args[i + 1 + counter];
         }
         RecipeUtils.registerShapedRecipe((ItemStack) args[0], s, stacks);
-    }
+    }*/
     
     // -------------------------------------------------------------------------    
     // Gruppen-Handler

+ 3 - 3
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -650,7 +650,7 @@ public class ScriptEvents extends ModuleListener
     {
         handleEvent(e.getPlayer(), "player_toss", (qd) -> 
         {
-            ScriptVars.setItemVars(qd, e.getEntityItem().getEntityItem());   
+            ScriptVars.setItemVars(qd, e.getEntityItem().getItem());   
             qd.setVar("cancel", e.isCanceled()); 
         }, (qd) -> 
         {
@@ -663,7 +663,7 @@ public class ScriptEvents extends ModuleListener
     {
         handleEvent(e.getEntityPlayer(), "player_pickup", (qd) -> 
         {
-            ScriptVars.setItemVars(qd, e.getItem().getEntityItem());  
+            ScriptVars.setItemVars(qd, e.getItem().getItem());  
             qd.setVar("cancel", e.isCanceled()); 
         }, (qd) -> 
         {
@@ -800,7 +800,7 @@ public class ScriptEvents extends ModuleListener
             }
             data.setVar("event", "villager_give");
             ScriptVars.setPlayerVars(data, p); 
-            ScriptVars.setItemVars(data, itemEnt.getEntityItem());
+            ScriptVars.setItemVars(data, itemEnt.getItem());
             data.setVar("villager_loc", new Location(v));                    
             data.setVar("villager_prof", v.getProfessionForge().getRegistryName());
             data.setVar("cancel", e.isCanceled()); 

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

@@ -181,7 +181,7 @@ public class ItemStackUtils
         }
         catch(NBTException ex)
         {
-            throw new IllegalItemStackStringException(s);
+            throw new IllegalItemStackStringException(ex.getMessage());
         }
     }
     

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

@@ -1,15 +1,15 @@
 package me.km.utils;
 
-import java.util.ArrayList;
+/*import java.util.ArrayList;
 import java.util.List;
 import net.minecraft.item.ItemStack;
 import net.minecraft.item.crafting.CraftingManager;
 import net.minecraft.item.crafting.FurnaceRecipes;
-import net.minecraft.item.crafting.IRecipe;
+import net.minecraft.item.crafting.IRecipe;*/
 
 public class RecipeUtils 
 {
-    private static final ArrayList<IRecipe> RECIPES = new ArrayList<>();
+    /*private static final ArrayList<IRecipe> RECIPES = new ArrayList<>();
     
     private static void pushLastRecipe()
     {
@@ -46,5 +46,5 @@ public class RecipeUtils
     {
         CraftingManager.getInstance().getRecipeList().removeAll(RECIPES);
         RECIPES.clear();
-    }
+    }*/
 }