Explorar o código

season command, lots of new items, crystal leaves

Kajetan Johannes Hammerle %!s(int64=6) %!d(string=hai) anos
pai
achega
2a830ab2f1
Modificáronse 78 ficheiros con 591 adicións e 109 borrados
  1. 8 0
      src/main/java/me/km/ClientProxy.java
  2. 13 24
      src/main/java/me/km/KajetansMod.java
  3. 1 0
      src/main/java/me/km/api/Utils.java
  4. 155 0
      src/main/java/me/km/blocks/BlockModLeaves.java
  5. 1 2
      src/main/java/me/km/blocks/BlockSpikeTrap.java
  6. 2 2
      src/main/java/me/km/blocks/CauldronColorMixer.java
  7. 16 0
      src/main/java/me/km/blocks/ModBlocks.java
  8. 1 0
      src/main/java/me/km/effects/Effect.java
  9. 34 0
      src/main/java/me/km/effects/passive/PlayerJumpEvent.java
  10. 46 0
      src/main/java/me/km/environment/CommandSeason.java
  11. 5 56
      src/main/java/me/km/items/ItemKey.java
  12. 46 0
      src/main/java/me/km/items/ModItems.java
  13. 8 1
      src/main/java/me/km/networking/FunctionKey.java
  14. 5 15
      src/main/java/me/km/networking/KeyManager.java
  15. 16 4
      src/main/java/me/km/networking/SeasonUpdate.java
  16. 1 0
      src/main/java/me/km/permissions/Permissions.java
  17. 10 0
      src/main/resources/assets/km/blockstates/blue_crystal_leaves.json
  18. 10 0
      src/main/resources/assets/km/blockstates/red_crystal_leaves.json
  19. 10 0
      src/main/resources/assets/km/blockstates/white_crystal_leaves.json
  20. 26 0
      src/main/resources/assets/km/lang/en_US.lang
  21. 6 0
      src/main/resources/assets/km/models/block/leaves/blue_crystal_leaves.json
  22. 6 0
      src/main/resources/assets/km/models/block/leaves/red_crystal_leaves.json
  23. 6 0
      src/main/resources/assets/km/models/block/leaves/white_crystal_leaves.json
  24. 7 0
      src/main/resources/assets/km/models/item/apricot.json
  25. 6 0
      src/main/resources/assets/km/models/item/arrow_down.json
  26. 6 0
      src/main/resources/assets/km/models/item/arrow_left.json
  27. 6 0
      src/main/resources/assets/km/models/item/arrow_right.json
  28. 6 0
      src/main/resources/assets/km/models/item/arrow_up.json
  29. 1 1
      src/main/resources/assets/km/models/item/bronze_key.json
  30. 6 0
      src/main/resources/assets/km/models/item/check_green.json
  31. 6 0
      src/main/resources/assets/km/models/item/check_red.json
  32. 6 0
      src/main/resources/assets/km/models/item/coarse_cloth.json
  33. 1 1
      src/main/resources/assets/km/models/item/copper_key.json
  34. 6 0
      src/main/resources/assets/km/models/item/cross_green.json
  35. 6 0
      src/main/resources/assets/km/models/item/cross_red.json
  36. 6 0
      src/main/resources/assets/km/models/item/fried_egg.json
  37. 1 1
      src/main/resources/assets/km/models/item/gold_key.json
  38. 1 1
      src/main/resources/assets/km/models/item/iron_key.json
  39. 25 0
      src/main/resources/assets/km/models/item/key.json
  40. 6 0
      src/main/resources/assets/km/models/item/minus_green.json
  41. 6 0
      src/main/resources/assets/km/models/item/minus_red.json
  42. 6 0
      src/main/resources/assets/km/models/item/mushroom_stick_cooked.json
  43. 6 0
      src/main/resources/assets/km/models/item/mushroom_stick_raw.json
  44. 6 0
      src/main/resources/assets/km/models/item/pear.json
  45. 8 0
      src/main/resources/assets/km/models/item/plum.json
  46. 6 0
      src/main/resources/assets/km/models/item/plus_green.json
  47. 6 0
      src/main/resources/assets/km/models/item/plus_red.json
  48. 6 0
      src/main/resources/assets/km/models/item/return_green.json
  49. 6 0
      src/main/resources/assets/km/models/item/return_red.json
  50. 1 1
      src/main/resources/assets/km/models/item/silver_key.json
  51. BIN=BIN
      src/main/resources/assets/km/textures/colormap/foliage_winter.png
  52. BIN=BIN
      src/main/resources/assets/km/textures/colormap/grass_winter.png
  53. BIN=BIN
      src/main/resources/assets/km/textures/items/cloth/cloth.png
  54. BIN=BIN
      src/main/resources/assets/km/textures/items/food/apricot.png
  55. BIN=BIN
      src/main/resources/assets/km/textures/items/food/fried_egg.png
  56. BIN=BIN
      src/main/resources/assets/km/textures/items/food/mushroom_stick.png
  57. BIN=BIN
      src/main/resources/assets/km/textures/items/food/mushroom_stick_raw.png
  58. BIN=BIN
      src/main/resources/assets/km/textures/items/food/pear.png
  59. BIN=BIN
      src/main/resources/assets/km/textures/items/food/plum.png
  60. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/arrow_down.png
  61. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/arrow_left.png
  62. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/arrow_right.png
  63. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/arrow_up.png
  64. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/check_green.png
  65. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/check_red.png
  66. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/cross_green.png
  67. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/cross_red.png
  68. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/minus_green.png
  69. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/minus_red.png
  70. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/plus_green.png
  71. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/plus_red.png
  72. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/return_green.png
  73. BIN=BIN
      src/main/resources/assets/km/textures/items/icons/return_red.png
  74. BIN=BIN
      src/main/resources/assets/km/textures/items/keys/bronze_key.png
  75. BIN=BIN
      src/main/resources/assets/km/textures/items/keys/copper_key.png
  76. BIN=BIN
      src/main/resources/assets/km/textures/items/keys/gold_key.png
  77. BIN=BIN
      src/main/resources/assets/km/textures/items/keys/iron_key.png
  78. BIN=BIN
      src/main/resources/assets/km/textures/items/keys/silver_key.png

+ 8 - 0
src/main/java/me/km/ClientProxy.java

@@ -102,6 +102,10 @@ public class ClientProxy extends CommonProxy
         bColors.registerBlockColorHandler(colorer, ModBlocks.cauldronBirch);
         bColors.registerBlockColorHandler(colorer, ModBlocks.cauldronJungle);
         bColors.registerBlockColorHandler(colorer, ModBlocks.cauldronSpruce);
+
+        bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) -> 16626126, ModBlocks.redCrystalLeaves);
+        bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) -> 11460861, ModBlocks.blueCrystalLeaves);
+        bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int ti) -> 15067367, ModBlocks.whiteCrystalLeaves);
         
         bColors.registerBlockColorHandler((IBlockState state, IBlockAccess w, BlockPos pos, int tintIndex) -> 
                 w != null && pos != null ? BiomeColorHelper.getFoliageColorAtPos(w, pos) : ColorizerFoliage.getFoliageColorBasic(), Blocks.LEAVES);
@@ -111,6 +115,10 @@ public class ClientProxy extends CommonProxy
         {
             return tintIndex > 0 ? -1 : ((ItemColoredSoup) stack.getItem()).getColor(stack);
         }, ModItems.coloredSoup);
+        
+        iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> 16626126, Item.getItemFromBlock(ModBlocks.redCrystalLeaves));
+        iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> 11460861, Item.getItemFromBlock(ModBlocks.blueCrystalLeaves));
+        iColors.registerItemColorHandler((ItemStack stack, int tintIndex) -> 15067367, Item.getItemFromBlock(ModBlocks.whiteCrystalLeaves));
     }
 
     @SideOnly(Side.CLIENT)

+ 13 - 24
src/main/java/me/km/KajetansMod.java

@@ -105,18 +105,14 @@ public class KajetansMod
                         String[] parts = e.getMessage().split(" ");
                         switch(parts[0])
                         {
-                            case "human":
-                                me.km.entities.EntityHuman human = new me.km.entities.EntityHuman(p.world);
-                                human.setPosition(p.posX, p.posY, p.posZ);
-                                p.world.spawnEntity(human);
+                            case "0":
+                                ModPacketHandler.sendSeasonUpdate(p, (byte) 0);
                                 break;
-                            case "name":
-                                me.km.api.Utils.getEntities(p.world, p.posX, p.posY, p.posZ, 5, me.km.entities.EntityHuman.class)
-                                        .forEach(h -> h.setCustomNameTag(parts[1]));
+                            case "1":
+                                ModPacketHandler.sendSeasonUpdate(p, (byte) 1);
                                 break;
-                            case "skin":
-                                me.km.api.Utils.getEntities(p.world, p.posX, p.posY, p.posZ, 5, me.km.entities.EntityHuman.class)
-                                        .forEach(h -> h.setSkinName(parts[1]));
+                            case "2":
+                                ModPacketHandler.sendSeasonUpdate(p, (byte) 2);
                                 break;
                         }
                     }
@@ -127,21 +123,14 @@ public class KajetansMod
                 }
                 
                 @net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-                public void onCrafting(net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemCraftedEvent e)
-                {  
-                    if(e.player.world.isRemote)
+                public void onPlayerFall(LivingEvent.LivingJumpEvent e)
+                {         
+                    System.out.println("WUSI");
+                    if(e.getEntityLiving() instanceof net.minecraft.entity.player.EntityPlayerMP)
                     {
-                        System.out.println("CRAFT");
-                        int size = e.craftMatrix.getInventoryStackLimit();
-                        net.minecraft.item.ItemStack stack;
-                        for(int i = 0; i < size; i++)
-                        {
-                            stack = e.craftMatrix.getStackInSlot(i);
-                            if(!stack.isEmpty())
-                            {
-                                stack.shrink(1);
-                            }
-                        }
+                        System.out.println("SCALE");
+                        net.minecraft.entity.player.EntityPlayerMP p = (net.minecraft.entity.player.EntityPlayerMP) e.getEntityLiving();
+                        Utils.setVelocity(p, p.motionX, p.motionY * 2, p.motionZ);
                     }
                 }
             });*/

+ 1 - 0
src/main/java/me/km/api/Utils.java

@@ -116,6 +116,7 @@ public class Utils
         ent.motionX *= scale;
         ent.motionY *= scale;
         ent.motionZ *= scale;
+        updateVelocity(ent);
     }
     
     

+ 155 - 0
src/main/java/me/km/blocks/BlockModLeaves.java

@@ -0,0 +1,155 @@
+package me.km.blocks;
+
+import java.util.Random;
+import javax.annotation.Nullable;
+import me.km.KajetansMod;
+import net.minecraft.block.BlockLeaves;
+import net.minecraft.block.BlockPlanks;
+import net.minecraft.block.SoundType;
+import net.minecraft.block.properties.IProperty;
+import net.minecraft.block.state.BlockStateContainer;
+import net.minecraft.block.state.IBlockState;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.StatList;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.BlockRenderLayer;
+import net.minecraft.util.EnumFacing;
+import net.minecraft.util.NonNullList;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.fml.relauncher.Side;
+import net.minecraftforge.fml.relauncher.SideOnly;
+
+public class BlockModLeaves extends BlockLeaves implements IBlockBase
+{
+    protected String name;
+    private final BlockPlanks.EnumType planks;
+
+    public BlockModLeaves(String name, String local, BlockPlanks.EnumType planks) 
+    {
+        this.name = name;
+        this.setRegistryName(name);
+        super.setUnlocalizedName(local);
+        
+        this.planks = planks;
+        this.setDefaultState(this.blockState.getBaseState().withProperty(CHECK_DECAY, true).withProperty(DECAYABLE, true));
+    }
+    
+    @Override
+    public void registerItemModel(Item itemBlock) 
+    {
+        KajetansMod.proxy.registerItemRenderer(itemBlock, 0, name);
+    }
+    
+    @Override
+    public BlockModLeaves setSoundType(SoundType sound) 
+    {
+        super.setSoundType(sound);
+        return this;
+    }
+
+    @Override
+    public int quantityDropped(Random random)
+    {
+        return 0;
+    }
+    
+    @Override
+    public Item getItemDropped(IBlockState state, Random rand, int fortune)
+    {
+        return Item.getItemFromBlock(this);
+    }
+
+    @Override
+    protected void dropApple(World worldIn, BlockPos pos, IBlockState state, int chance)
+    {
+        if(planks == BlockPlanks.EnumType.OAK && worldIn.rand.nextInt(chance) == 0)
+        {
+            spawnAsEntity(worldIn, pos, new ItemStack(Items.APPLE));
+        }
+    }
+
+    @Override
+    protected ItemStack getSilkTouchDrop(IBlockState state)
+    {
+        return new ItemStack(Item.getItemFromBlock(this), 1, 0);
+    }
+
+    @Override
+    public IBlockState getStateFromMeta(int meta)
+    {
+        return this.getDefaultState().withProperty(DECAYABLE, (meta & 4) == 0).withProperty(CHECK_DECAY, (meta & 8) > 0);
+    }
+
+    @Override
+    public int getMetaFromState(IBlockState state)
+    {
+        int i = 0;
+        if(!state.getValue(DECAYABLE))
+        {
+            i |= 4;
+        }
+        if(state.getValue(CHECK_DECAY))
+        {
+            i |= 8;
+        }
+        return i;
+    }
+
+    @Override
+    public BlockPlanks.EnumType getWoodType(int meta)
+    {
+        return planks;
+    }
+
+    @Override
+    protected BlockStateContainer createBlockState()
+    {
+        return new BlockStateContainer(this, new IProperty[] {CHECK_DECAY, DECAYABLE});
+    }
+
+    @Override
+    public void harvestBlock(World worldIn, EntityPlayer player, BlockPos pos, IBlockState state, @Nullable TileEntity te, ItemStack stack)
+    {
+        if (!worldIn.isRemote && stack.getItem() == Items.SHEARS)
+        {
+            player.addStat(StatList.getBlockStats(this));
+        }
+        else
+        {
+            super.harvestBlock(worldIn, player, pos, state, te, stack);
+        }
+    }
+
+    @Override
+    public NonNullList<ItemStack> onSheared(ItemStack item, net.minecraft.world.IBlockAccess world, BlockPos pos, int fortune)
+    {
+        return NonNullList.withSize(1, new ItemStack(this, 1));
+    }
+    
+    // this stuff here has to be done because minecraft isn't calling setGraphicsLevel on our instance
+    @Override
+    public boolean isOpaqueCube(IBlockState state)
+    {
+        return Blocks.LEAVES.isOpaqueCube(state);
+    }
+    
+    @SideOnly(Side.CLIENT)
+    @Override
+    public BlockRenderLayer getBlockLayer()
+    {
+        return  Blocks.LEAVES.getBlockLayer();
+    }
+    
+    @SideOnly(Side.CLIENT)
+    @Override
+    public boolean shouldSideBeRendered(IBlockState bs, IBlockAccess ba, BlockPos pos, EnumFacing side)
+    {
+        return Blocks.LEAVES.shouldSideBeRendered(bs, ba, pos, side);
+    }
+}

+ 1 - 2
src/main/java/me/km/blocks/BlockSpikeTrap.java

@@ -11,7 +11,6 @@ import net.minecraft.block.state.BlockStateContainer;
 import net.minecraft.block.state.IBlockState;
 import net.minecraft.creativetab.CreativeTabs;
 import net.minecraft.entity.Entity;
-import net.minecraft.entity.EntityLivingBase;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.util.DamageSource;
@@ -46,7 +45,7 @@ public class BlockSpikeTrap extends BlockTrap
     @Override
     public void onEntityCollidedWithBlock(World w, BlockPos pos, IBlockState state, Entity ent) 
     {
-        if(ent instanceof EntityLivingBase)
+        if(!ent.isSneaking())
         {
             ent.attackEntityFrom(DamageSource.CACTUS, 1);
         }

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

@@ -41,8 +41,8 @@ public class CauldronColorMixer
     private final static Color SUGAR = new Color(185, 185, 195); 
     //private final static Color WHEAT = new Color(122, 125, 36);    
     
-    private LinkedList<ItemStack> items;
-    private LinkedList<Color> colors;
+    private final LinkedList<ItemStack> items;
+    private final LinkedList<Color> colors;
     private Color cachedColor; 
 
     public CauldronColorMixer()

+ 16 - 0
src/main/java/me/km/blocks/ModBlocks.java

@@ -6,6 +6,7 @@ import me.km.fluids.BlockFluidPoison;
 import me.km.fluids.ModFluids;
 import me.km.items.ItemMetal;
 import net.minecraft.block.Block;
+import net.minecraft.block.BlockPlanks;
 import net.minecraft.block.SoundType;
 import net.minecraft.block.material.MapColor;
 import net.minecraft.block.material.Material;
@@ -72,6 +73,11 @@ public class ModBlocks
     // slabs
     public static BlockModSlab gravelSlab;
     
+    // leaves
+    public static BlockModLeaves redCrystalLeaves;
+    public static BlockModLeaves blueCrystalLeaves;
+    public static BlockModLeaves whiteCrystalLeaves;
+    
     public static void initBlocks(IForgeRegistry<Block> r) 
     {
         // ores + blocks
@@ -133,6 +139,11 @@ public class ModBlocks
         
         // slabs
         gravelSlab = register(r, (BlockModSlab) new BlockModSlab(Material.SAND, "gravel_slab", "gravelSlab").setSoundType(SoundType.GROUND).setHardness(0.6F));
+        
+        // leaves
+        redCrystalLeaves = register(r, new BlockModLeaves("red_crystal_leaves", "redCrystalLeaves", BlockPlanks.EnumType.JUNGLE));
+        blueCrystalLeaves = register(r, new BlockModLeaves("blue_crystal_leaves", "blueCrystalLeaves", BlockPlanks.EnumType.OAK));
+        whiteCrystalLeaves = register(r, new BlockModLeaves("white_crystal_leaves", "whiteCrystalLeaves", BlockPlanks.EnumType.SPRUCE));
     }
     
     public static void initItemBlocks(IForgeRegistry<Item> r) 
@@ -187,6 +198,11 @@ public class ModBlocks
         
         // slabs
         register(r, gravelSlab, getItemBlock(gravelSlab));
+        
+        // leaves
+        register(r, redCrystalLeaves, getItemBlock(redCrystalLeaves));
+        register(r, blueCrystalLeaves, getItemBlock(blueCrystalLeaves));
+        register(r, whiteCrystalLeaves, getItemBlock(whiteCrystalLeaves));
     }
 
     private static void register(IForgeRegistry<Item> r, Block block, Item itemBlock) 

+ 1 - 0
src/main/java/me/km/effects/Effect.java

@@ -62,6 +62,7 @@ public enum Effect
     NO_ARMOR_DROPPING       ,
     DODGE                   ,
     BLOOD_THIRST            ,
+    JUMP_BONUS              ,
     
     // active effects
     POISON_VOLLEY           (new PoisonVolley()),

+ 34 - 0
src/main/java/me/km/effects/passive/PlayerJumpEvent.java

@@ -0,0 +1,34 @@
+package me.km.effects.passive;
+
+import me.km.KajetansMod;
+import me.km.api.Module;
+import me.km.api.ModuleListener;
+import me.km.api.Utils;
+import me.km.effects.Effect;
+import me.km.effects.EffectUtils;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraftforge.event.entity.living.LivingEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+public class PlayerJumpEvent extends ModuleListener
+{
+    public PlayerJumpEvent(Module m) 
+    {
+        super(m);
+    }
+    
+    @SubscribeEvent
+    public void onPlayerFall(LivingEvent.LivingJumpEvent e)
+    {         
+        if(KajetansMod.worldManager.getWorldPreferences(e.getEntityLiving().world).skills && 
+                e.getEntityLiving() instanceof EntityPlayerMP)
+        {
+            EntityPlayerMP p = (EntityPlayerMP) e.getEntityLiving();
+            int bonus = EffectUtils.getEffectLevel(p, Effect.JUMP_BONUS);
+            if(bonus > 0)
+            {
+                Utils.setVelocity(p, p.motionX, p.motionY * (1 + bonus / 10d), p.motionZ);
+            }
+        }
+    }
+}

+ 46 - 0
src/main/java/me/km/environment/CommandSeason.java

@@ -0,0 +1,46 @@
+package me.km.environment;
+
+import me.km.api.GlobalText;
+import me.km.api.Module;
+import me.km.api.ModuleCommand;
+import me.km.networking.ModPacketHandler;
+import me.km.permissions.Permissions;
+import net.minecraft.command.ICommandSender;
+import net.minecraft.entity.player.EntityPlayerMP;
+
+public class CommandSeason extends ModuleCommand
+{
+    public CommandSeason(Module m) 
+    {
+        super("season", m);
+        super.setDescription("Ändert deine Jahreszeit");
+        super.setUsage("/season");
+        super.setPermission(Permissions.SEASON);
+        super.addAlias("season");
+    }
+
+    @Override
+    public boolean execute(ICommandSender cs, String[] arg) 
+    {
+        if(!(cs instanceof EntityPlayerMP))
+        {
+            this.getModule().send(cs, GlobalText.onlyPlayer());
+            return true;
+        }
+        if(arg.length < 1)
+        {
+            return false;
+        }
+        EntityPlayerMP p = (EntityPlayerMP) cs;
+        try
+        {
+            Byte b = Byte.parseByte(arg[0]);
+            ModPacketHandler.sendSeasonUpdate(p, b);
+        }
+        catch(NumberFormatException ex)
+        {
+            return false;
+        }
+        return true;
+    }
+}

+ 5 - 56
src/main/java/me/km/items/ItemKey.java

@@ -2,12 +2,11 @@ package me.km.items;
 
 import java.util.List;
 import net.minecraft.client.util.ITooltipFlag;
+import net.minecraft.creativetab.CreativeTabs;
 import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
 import net.minecraft.util.text.TextFormatting;
 import net.minecraft.world.World;
-import net.minecraftforge.common.capabilities.ICapabilityProvider;
 import net.minecraftforge.fml.relauncher.Side;
 import net.minecraftforge.fml.relauncher.SideOnly;
 
@@ -20,75 +19,25 @@ public class ItemKey extends ItemBase
         super(name, local);
         this.toolMaterial = materialIn;
         this.maxStackSize = 1;
+        super.setCreativeTab(CreativeTabs.MISC);
     }
     
     public int getLockPickResistance()
     {
         return toolMaterial.getHarvestLevel() + 1;
     }
-
-    @Override
-    public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) 
-    {
-        getTagCompound(stack);
-        return null;
-    }  
-    
-    private static NBTTagCompound getTagCompound(ItemStack stack)
-    {
-        NBTTagCompound com = stack.getTagCompound();
-        if(com == null)
-        {
-            com = new NBTTagCompound();
-            com.setString("chestkey", "");
-            com.setBoolean("iscopiedkey", false);
-        }
-        else 
-        {
-            if(!com.hasKey("chestkey"))
-            {
-                com.setString("chestkey", "");  
-            }  
-            if(!com.hasKey("iscopiedkey"))
-            {
-                com.setBoolean("iscopiedkey", false);  
-            }
-        }
-        stack.setTagCompound(com);
-        return com;
-    }
-    
-    private String getKey(ItemStack stack)
-    {
-        return getTagCompound(stack).getString("chestkey");
-    }
-    
-    private void setKey(ItemStack stack, String key)
-    {
-        getTagCompound(stack).setString("chestkey", key);
-    } 
-    
-   private boolean isCopy(ItemStack stack)
-    {
-        return getTagCompound(stack).getBoolean("iscopiedkey");
-    }
-    
-    private void setCopy(ItemStack stack, boolean copy)
-    {
-        getTagCompound(stack).setBoolean("iscopiedkey", copy);
-    } 
     
     @SideOnly(Side.CLIENT)
     @Override
     public void addInformation(ItemStack stack, World w, List<String> lore, ITooltipFlag flag) 
     {
-        if(getKey(stack).isEmpty())
+        if(stack.hasDisplayName())
         {
-            lore.set(0, TextFormatting.RED + lore.get(0));
+            lore.set(0, TextFormatting.GREEN + getItemStackDisplayName(stack));
         }
         else
         {
-            lore.set(0, TextFormatting.GREEN + lore.get(0));
+            lore.set(0, TextFormatting.RED + getItemStackDisplayName(stack));
         }
     }
 }

+ 46 - 0
src/main/java/me/km/items/ModItems.java

@@ -231,9 +231,32 @@ public class ModItems
     public static ItemBase batWing; 
     public static ItemBase wolfFur; 
     public static ItemBlockSpecial campFire; 
+    public static ItemBase coarseCloth;
     
     // food
     public static ItemColoredSoup coloredSoup;
+    public static ItemFood apricot;
+    public static ItemFood friedEgg;
+    public static ItemBase mushroomStickRaw;
+    public static ItemFood mushroomStickCooked;
+    public static ItemFood pear;
+    public static ItemFood plum;
+    
+    // icons
+    public static ItemBase arrowDown;
+    public static ItemBase arrowLeft;
+    public static ItemBase arrowRight;
+    public static ItemBase arrowUp;
+    public static ItemBase checkGreen;
+    public static ItemBase checkRed;
+    public static ItemBase crossGreen;
+    public static ItemBase crossRed;
+    public static ItemBase minusGreen;
+    public static ItemBase minusRed;
+    public static ItemBase plusGreen;
+    public static ItemBase plusRed;
+    public static ItemBase returnGreen;
+    public static ItemBase returnRed;
     
     // herbs
     public static ItemHerbs herbStrong;
@@ -404,9 +427,32 @@ public class ModItems
         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));
+        coarseCloth = register(r, new ItemBase("coarse_cloth", "coarseCloth").setCreativeTab(CreativeTabs.MATERIALS));
         
         // food
         coloredSoup = register(r, new ItemColoredSoup("colored_soup", "soupColored"));
+        apricot = register(r, new ItemFood("apricot", "apricot", 4, 0.3f, false));
+        friedEgg = register(r, new ItemFood("fried_egg", "friedEgg", 2, 0.3f, false));
+        mushroomStickRaw = register(r, new ItemBase("mushroom_stick_raw", "mushroomStickRaw").setCreativeTab(CreativeTabs.FOOD));
+        mushroomStickCooked = register(r, new ItemFood("mushroom_stick_cooked", "mushroomStickCooked", 9, 0.9f, false));
+        pear = register(r, new ItemFood("pear", "pear", 4, 0.3f, false));
+        plum = register(r, new ItemFood("plum", "plum", 4, 0.3f, false));
+        
+        // icons
+        arrowDown = register(r, new ItemBase("arrow_down", "arrowDown").setCreativeTab(CreativeTabs.MISC));
+        arrowLeft = register(r, new ItemBase("arrow_left", "arrowLeft").setCreativeTab(CreativeTabs.MISC));
+        arrowRight = register(r, new ItemBase("arrow_right", "arrowRight").setCreativeTab(CreativeTabs.MISC));
+        arrowUp = register(r, new ItemBase("arrow_up", "arrowUp").setCreativeTab(CreativeTabs.MISC));
+        checkGreen = register(r, new ItemBase("check_green", "checkGreen")).setCreativeTab(CreativeTabs.MISC);
+        checkRed = register(r, new ItemBase("check_red", "checkRed").setCreativeTab(CreativeTabs.MISC));
+        crossGreen = register(r, new ItemBase("cross_green", "crossGreen").setCreativeTab(CreativeTabs.MISC));
+        crossRed = register(r, new ItemBase("cross_red", "crossRed").setCreativeTab(CreativeTabs.MISC));
+        minusGreen = register(r, new ItemBase("minus_green", "minusGreen").setCreativeTab(CreativeTabs.MISC));
+        minusRed = register(r, new ItemBase("minus_red", "minusRed").setCreativeTab(CreativeTabs.MISC));
+        plusGreen = register(r, new ItemBase("plus_green", "plusGreen").setCreativeTab(CreativeTabs.MISC));
+        plusRed = register(r, new ItemBase("plus_red", "plusRed").setCreativeTab(CreativeTabs.MISC));
+        returnGreen = register(r, new ItemBase("return_green", "returnGreen").setCreativeTab(CreativeTabs.MISC));
+        returnRed = register(r, new ItemBase("return_red", "returnRed").setCreativeTab(CreativeTabs.MISC));
         
         // herbs
         herbStrong = register(r, new ItemHerbs("herb_strong", "herbStrong", new PotionEffect(MobEffects.SPEED, 6000, 1)));

+ 8 - 1
src/main/java/me/km/networking/FunctionKey.java

@@ -2,6 +2,7 @@ package me.km.networking;
 
 import io.netty.buffer.ByteBuf;
 import me.km.KajetansMod;
+import me.km.effects.passive.PlayerJumpEvent;
 import me.km.snuviscript.ScriptEvents;
 import net.minecraft.entity.player.EntityPlayerMP;
 import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
@@ -42,7 +43,13 @@ public class FunctionKey implements IMessage
             EntityPlayerMP p = ctx.getServerHandler().player;
             p.getServerWorld().addScheduledTask(() -> 
             {
-                KajetansMod.scripts.getEvent(ScriptEvents.class).onFunctionKey(ctx.getServerHandler().player, message.key);
+                try
+                {
+                    KajetansMod.scripts.getEvent(ScriptEvents.class).onFunctionKey(ctx.getServerHandler().player, message.key);
+                }
+                catch(Exception ex)
+                {
+                }
             });
             return null;
         }

+ 5 - 15
src/main/java/me/km/networking/KeyManager.java

@@ -11,7 +11,7 @@ import org.lwjgl.input.Keyboard;
 @SideOnly(Side.CLIENT)
 public class KeyManager 
 {
-    private KeyBinding[] functionKeys;
+    private final KeyBinding[] functionKeys;
     
     public KeyManager()
     {
@@ -34,25 +34,15 @@ public class KeyManager
         return keyBind;
     }
     
-    private int getFirstPressedKey()
+    @SubscribeEvent
+    public void onRenderGui(TickEvent.ClientTickEvent e)
     {
-        for(int i = 0; i < 9; i++)
+        for(int i = 0; i < functionKeys.length; i++)
         {
             if(functionKeys[i].isPressed())
             {
-                return i + 1;
+                ModPacketHandler.sendFunctionKey(i + 1);
             }
         }
-        return -1;
-    }
-    
-    @SubscribeEvent
-    public void onRenderGui(TickEvent.ClientTickEvent e)
-    {
-        int key = getFirstPressedKey();
-        if(key != -1)
-        {
-            ModPacketHandler.sendFunctionKey(key);
-        }
     }
 }

+ 16 - 4
src/main/java/me/km/networking/SeasonUpdate.java

@@ -45,16 +45,28 @@ public class SeasonUpdate implements IMessage
                 case 0:
                     KajetansMod.proxy.setFoliage(new ResourceLocation("textures/colormap/foliage.png"));
                     KajetansMod.proxy.setGrass(new ResourceLocation("textures/colormap/grass.png"));
+                    Minecraft.getMinecraft().addScheduledTask(() -> 
+                    {
+                        Minecraft.getMinecraft().refreshResources();
+                    });
                     break;
                 case 1:
                     KajetansMod.proxy.setFoliage(new ResourceLocation(KajetansMod.MODID, "textures/colormap/foliage.png"));
                     KajetansMod.proxy.setGrass(new ResourceLocation(KajetansMod.MODID, "textures/colormap/grass.png"));
+                    Minecraft.getMinecraft().addScheduledTask(() -> 
+                    {
+                        Minecraft.getMinecraft().refreshResources();
+                    });
+                    break;
+                case 2:
+                    KajetansMod.proxy.setFoliage(new ResourceLocation(KajetansMod.MODID, "textures/colormap/foliage_winter.png"));
+                    KajetansMod.proxy.setGrass(new ResourceLocation(KajetansMod.MODID, "textures/colormap/grass_winter.png"));
+                    Minecraft.getMinecraft().addScheduledTask(() -> 
+                    {
+                        Minecraft.getMinecraft().refreshResources();
+                    });
                     break;
             }
-            Minecraft.getMinecraft().addScheduledTask(() -> 
-            {
-                Minecraft.getMinecraft().refreshResources();
-            });
             return null;
         }
     }

+ 1 - 0
src/main/java/me/km/permissions/Permissions.java

@@ -98,6 +98,7 @@ public class Permissions
     // Environment
     public final static String HEAL_STATS = "healstats"; 
     public final static String TEMPERATURE = "temperature"; 
+    public final static String SEASON = "season"; 
 
     // Jobs
     public final static String JOB = "job"; 

+ 10 - 0
src/main/resources/assets/km/blockstates/blue_crystal_leaves.json

@@ -0,0 +1,10 @@
+{
+    "variants": {
+        "normal": { "model": "km:leaves/blue_crystal_leaves" },
+        "check_decay=true,decayable=true": { "model": "km:leaves/blue_crystal_leaves" },
+        "check_decay=false,decayable=true": { "model": "km:leaves/blue_crystal_leaves" },
+        "check_decay=true,decayable=false": { "model": "km:leaves/blue_crystal_leaves" },
+        "check_decay=false,decayable=false": { "model": "km:leaves/blue_crystal_leaves" }
+    }
+}
+

+ 10 - 0
src/main/resources/assets/km/blockstates/red_crystal_leaves.json

@@ -0,0 +1,10 @@
+{
+    "variants": {
+        "normal": { "model": "km:leaves/red_crystal_leaves" },
+        "check_decay=true,decayable=true": { "model": "km:leaves/red_crystal_leaves" },
+        "check_decay=false,decayable=true": { "model": "km:leaves/red_crystal_leaves" },
+        "check_decay=true,decayable=false": { "model": "km:leaves/red_crystal_leaves" },
+        "check_decay=false,decayable=false": { "model": "km:leaves/red_crystal_leaves" }
+    }
+}
+

+ 10 - 0
src/main/resources/assets/km/blockstates/white_crystal_leaves.json

@@ -0,0 +1,10 @@
+{
+    "variants": {
+        "normal": { "model": "km:leaves/white_crystal_leaves" },
+        "check_decay=true,decayable=true": { "model": "km:leaves/white_crystal_leaves" },
+        "check_decay=false,decayable=true": { "model": "km:leaves/white_crystal_leaves" },
+        "check_decay=true,decayable=false": { "model": "km:leaves/white_crystal_leaves" },
+        "check_decay=false,decayable=false": { "model": "km:leaves/white_crystal_leaves" }
+    }
+}
+

+ 26 - 0
src/main/resources/assets/km/lang/en_US.lang

@@ -87,6 +87,10 @@ fluid.honey=Honey
 
 tile.gravelSlab.name=Gravel Slab
 
+tile.redCrystalLeaves.name=Red Crystal Leaves
+tile.blueCrystalLeaves.name=Blue Crystal Leaves
+tile.whiteCrystalLeaves.name=White Crystal Leaves
+
 
 item.wandWood.name=Wooden Wand
 item.wandStone.name=Stone Wand
@@ -179,8 +183,30 @@ item.realHayBed.name=Hay Mat
 item.bundleHay.name=Hay Bundle
 item.batWing.name=Bat Wing
 item.wolfFur.name=Wolf Fur
+item.coarseCloth.name=Coarse Cloth
 
 item.soupColored.name=Stew
+item.apricot.name=Apricot
+item.friedEgg.name=Fried Egg
+item.mushroomStickRaw.name=Raw Mushroom Stick
+item.mushroomStickCooked.name=Cooked Mushroom Stick
+item.pear.name=Pear
+item.plum.name=Plum
+
+item.arrowDown.name=Down Arrow
+item.arrowLeft.name=Left Arrow
+item.arrowRight.name=Right Arrow
+item.arrowUp.name=Up Arrow
+item.checkGreen.name=Green Check
+item.checkRed.name=Red Check
+item.crossGreen.name=Green Cross
+item.crossRed.name=Red Cross
+item.minusGreen.name=Green Minus
+item.minusRed.name=Red Minus
+item.plusGreen.name=Green Plus
+item.plusRed.name=Red Plus
+item.returnGreen.name=Green Return
+item.returnRed.name=Red Return
 
 item.herbStrong.name=Power Herb
 item.herbShadow.name=Shadow Herb

+ 6 - 0
src/main/resources/assets/km/models/block/leaves/blue_crystal_leaves.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/leaves",
+    "textures": {
+        "all": "blocks/leaves_oak"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/leaves/red_crystal_leaves.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/leaves",
+    "textures": {
+        "all": "blocks/leaves_jungle"
+    }
+}

+ 6 - 0
src/main/resources/assets/km/models/block/leaves/white_crystal_leaves.json

@@ -0,0 +1,6 @@
+{
+    "parent": "block/leaves",
+    "textures": {
+        "all": "blocks/leaves_spruce"
+    }
+}

+ 7 - 0
src/main/resources/assets/km/models/item/apricot.json

@@ -0,0 +1,7 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/food/apricot"
+    }
+}
+

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/arrow_down"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/arrow_left"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/arrow_right"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/arrow_up"
+    }
+}

+ 1 - 1
src/main/resources/assets/km/models/item/bronze_key.json

@@ -1,5 +1,5 @@
 {
-    "parent": "item/generated",
+    "parent": "km:item/key",
     "textures": {
         "layer0": "km:items/keys/bronze_key"
     }

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/check_green"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/check_red"
+    }
+}

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

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

+ 1 - 1
src/main/resources/assets/km/models/item/copper_key.json

@@ -1,5 +1,5 @@
 {
-    "parent": "item/generated",
+    "parent": "km:item/key",
     "textures": {
         "layer0": "km:items/keys/copper_key"
     }

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/cross_green"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/cross_red"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/food/fried_egg"
+    }
+}

+ 1 - 1
src/main/resources/assets/km/models/item/gold_key.json

@@ -1,5 +1,5 @@
 {
-    "parent": "item/generated",
+    "parent": "km:item/key",
     "textures": {
         "layer0": "km:items/keys/gold_key"
     }

+ 1 - 1
src/main/resources/assets/km/models/item/iron_key.json

@@ -1,5 +1,5 @@
 {
-    "parent": "item/generated",
+    "parent": "km:item/key",
     "textures": {
         "layer0": "km:items/keys/iron_key"
     }

+ 25 - 0
src/main/resources/assets/km/models/item/key.json

@@ -0,0 +1,25 @@
+{
+    "parent": "item/generated",
+    "display": {
+        "thirdperson_righthand": {
+            "rotation": [ 180, -90, 55 ],
+            "translation": [ 0, 2.0, 0.5 ],
+            "scale": [ 0.65, 0.65, 0.65 ]
+        },
+        "thirdperson_lefthand": {
+            "rotation": [ 180, 90, -55 ],
+            "translation": [ 0, 2.0, 0.5 ],
+            "scale": [ 0.65, 0.65, 0.65 ]
+        },
+        "firstperson_righthand": {
+            "rotation": [ 180, -90, 25 ],
+            "translation": [ 1.13, 1.2, 1.13 ],
+            "scale": [ 0.54, 0.54, 0.54 ]
+        },
+        "firstperson_lefthand": {
+            "rotation": [ 180, 90, -25 ],
+            "translation": [ 1.13, 1.2, 1.13 ],
+            "scale": [ 0.54, 0.54, 0.54 ]
+        }
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/minus_green"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/minus_red"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/handheld",
+    "textures": {
+        "layer0": "km:items/food/mushroom_stick"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/handheld",
+    "textures": {
+        "layer0": "km:items/food/mushroom_stick_raw"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/food/pear"
+    }
+}

+ 8 - 0
src/main/resources/assets/km/models/item/plum.json

@@ -0,0 +1,8 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/food/plum"
+    }
+}
+
+

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/plus_green"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/plus_red"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/return_green"
+    }
+}

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

@@ -0,0 +1,6 @@
+{
+    "parent": "item/generated",
+    "textures": {
+        "layer0": "km:items/icons/return_red"
+    }
+}

+ 1 - 1
src/main/resources/assets/km/models/item/silver_key.json

@@ -1,5 +1,5 @@
 {
-    "parent": "item/generated",
+    "parent": "km:item/key",
     "textures": {
         "layer0": "km:items/keys/silver_key"
     }

BIN=BIN
src/main/resources/assets/km/textures/colormap/foliage_winter.png


BIN=BIN
src/main/resources/assets/km/textures/colormap/grass_winter.png


BIN=BIN
src/main/resources/assets/km/textures/items/cloth/cloth.png


BIN=BIN
src/main/resources/assets/km/textures/items/food/apricot.png


BIN=BIN
src/main/resources/assets/km/textures/items/food/fried_egg.png


BIN=BIN
src/main/resources/assets/km/textures/items/food/mushroom_stick.png


BIN=BIN
src/main/resources/assets/km/textures/items/food/mushroom_stick_raw.png


BIN=BIN
src/main/resources/assets/km/textures/items/food/pear.png


BIN=BIN
src/main/resources/assets/km/textures/items/food/plum.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/arrow_down.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/arrow_left.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/arrow_right.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/arrow_up.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/check_green.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/check_red.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/cross_green.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/cross_red.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/minus_green.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/minus_red.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/plus_green.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/plus_red.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/return_green.png


BIN=BIN
src/main/resources/assets/km/textures/items/icons/return_red.png


BIN=BIN
src/main/resources/assets/km/textures/items/keys/bronze_key.png


BIN=BIN
src/main/resources/assets/km/textures/items/keys/copper_key.png


BIN=BIN
src/main/resources/assets/km/textures/items/keys/gold_key.png


BIN=BIN
src/main/resources/assets/km/textures/items/keys/iron_key.png


BIN=BIN
src/main/resources/assets/km/textures/items/keys/silver_key.png