Forráskód Böngészése

clean up, remaining recipes, player id / scoreboard / data moved to
player, remaining snuvi events, renamed wooden / golden items for
consistency with vanilla, command formatting

Kajetan Johannes Hammerle 5 éve
szülő
commit
10c480f8bc
100 módosított fájl, 1274 hozzáadás és 956 törlés
  1. 2 2
      src/main/java/me/km/Server.java
  2. 1 1
      src/main/java/me/km/entities/EntityBlackBear.java
  3. 1 1
      src/main/java/me/km/entities/EntityBrownBear.java
  4. 11 10
      src/main/java/me/km/entities/EntityHuman.java
  5. 24 184
      src/main/java/me/km/entities/EntityNobody.java
  6. 2 2
      src/main/java/me/km/entities/ModEntities.java
  7. 7 14
      src/main/java/me/km/entities/RenderNobody.java
  8. 0 20
      src/main/java/me/km/events/ArrowHitGroundEvent.java
  9. 36 0
      src/main/java/me/km/events/CommandEvent.java
  10. 0 49
      src/main/java/me/km/events/CustomEventCaller.java
  11. 0 23
      src/main/java/me/km/events/PlayerHurtEvent.java
  12. 30 0
      src/main/java/me/km/events/PlayerTabListNameEvent.java
  13. 0 29
      src/main/java/me/km/events/ThrowableLaunchEvent.java
  14. 0 6
      src/main/java/me/km/exception/EntityNotFoundException.java
  15. 0 9
      src/main/java/me/km/exception/IllegalItemStackStringException.java
  16. 0 9
      src/main/java/me/km/exception/IllegalLocationStringException.java
  17. 0 9
      src/main/java/me/km/exception/IllegalStringException.java
  18. 0 9
      src/main/java/me/km/exception/PlayerNotFoundException.java
  19. 11 11
      src/main/java/me/km/items/ModItems.java
  20. 85 2
      src/main/java/me/km/overrides/ModEntityPlayerMP.java
  21. 4 2
      src/main/java/me/km/overrides/ModPlayerList.java
  22. 12 17
      src/main/java/me/km/overrides/PlayerScoreboard.java
  23. 2 2
      src/main/java/me/km/permissions/Command.java
  24. 12 1
      src/main/java/me/km/permissions/ModCommandManager.java
  25. 8 116
      src/main/java/me/km/playerbank/PlayerManager.java
  26. 0 127
      src/main/java/me/km/recipes/ModRecipes.java
  27. 0 33
      src/main/java/me/km/scoreboard/ScoreboardUtils.java
  28. 1 1
      src/main/java/me/km/snuviscript/CommandGiveUp.java
  29. 20 23
      src/main/java/me/km/snuviscript/CommandScript.java
  30. 41 52
      src/main/java/me/km/snuviscript/MinecraftFunctions.java
  31. 35 47
      src/main/java/me/km/snuviscript/ScriptEvents.java
  32. 60 45
      src/main/java/me/km/utils/ItemStackUtils.java
  33. 3 4
      src/main/java/me/km/utils/Location.java
  34. 7 0
      src/main/java/me/km/utils/Mapper.java
  35. 0 7
      src/main/java/me/km/utils/ReflectionUtils.java
  36. 0 34
      src/main/java/me/km/utils/SpecialBlockUtils.java
  37. 0 39
      src/main/java/me/km/utils/TitleUtils.java
  38. 2 4
      src/main/java/me/km/utils/Utils.java
  39. 12 12
      src/main/resources/assets/km/lang/en_us.json
  40. 0 0
      src/main/resources/assets/km/models/item/golden_battleaxe.json
  41. 0 0
      src/main/resources/assets/km/models/item/golden_dagger.json
  42. 0 0
      src/main/resources/assets/km/models/item/golden_hammer.json
  43. 0 0
      src/main/resources/assets/km/models/item/golden_key.json
  44. 0 0
      src/main/resources/assets/km/models/item/golden_scepter.json
  45. 0 0
      src/main/resources/assets/km/models/item/golden_stick.json
  46. 0 0
      src/main/resources/assets/km/models/item/wooden_battleaxe.json
  47. 0 0
      src/main/resources/assets/km/models/item/wooden_dagger.json
  48. 0 0
      src/main/resources/assets/km/models/item/wooden_hammer.json
  49. 0 0
      src/main/resources/assets/km/models/item/wooden_scepter.json
  50. 0 0
      src/main/resources/assets/km/models/item/wooden_stick.json
  51. 81 0
      src/main/resources/data/km/loot_tables/entities/bear/blackbear.json
  52. 81 0
      src/main/resources/data/km/loot_tables/entities/bear/brownbear.json
  53. 15 0
      src/main/resources/data/km/recipes/armor/bronze_boots.json
  54. 16 0
      src/main/resources/data/km/recipes/armor/bronze_chestplate.json
  55. 15 0
      src/main/resources/data/km/recipes/armor/bronze_helmet.json
  56. 16 0
      src/main/resources/data/km/recipes/armor/bronze_leggings.json
  57. 15 0
      src/main/resources/data/km/recipes/armor/copper_boots.json
  58. 16 0
      src/main/resources/data/km/recipes/armor/copper_chestplate.json
  59. 15 0
      src/main/resources/data/km/recipes/armor/copper_helmet.json
  60. 16 0
      src/main/resources/data/km/recipes/armor/copper_leggings.json
  61. 19 0
      src/main/resources/data/km/recipes/axe/bronze_axe.json
  62. 19 0
      src/main/resources/data/km/recipes/axe/copper_axe.json
  63. 19 0
      src/main/resources/data/km/recipes/battleaxe/bronze_battleaxe.json
  64. 19 0
      src/main/resources/data/km/recipes/battleaxe/copper_battleaxe.json
  65. 19 0
      src/main/resources/data/km/recipes/battleaxe/diamond_battleaxe.json
  66. 19 0
      src/main/resources/data/km/recipes/battleaxe/golden_battleaxe.json
  67. 19 0
      src/main/resources/data/km/recipes/battleaxe/iron_battleaxe.json
  68. 19 0
      src/main/resources/data/km/recipes/battleaxe/stone_battleaxe.json
  69. 19 0
      src/main/resources/data/km/recipes/battleaxe/wooden_battleaxe.json
  70. 0 0
      src/main/resources/data/km/recipes/crate/crate_acacia.json
  71. 0 0
      src/main/resources/data/km/recipes/crate/crate_big_oak.json
  72. 0 0
      src/main/resources/data/km/recipes/crate/crate_birch.json
  73. 0 0
      src/main/resources/data/km/recipes/crate/crate_jungle.json
  74. 0 0
      src/main/resources/data/km/recipes/crate/crate_oak.json
  75. 0 0
      src/main/resources/data/km/recipes/crate/crate_spruce.json
  76. 18 0
      src/main/resources/data/km/recipes/dagger/bronze_dagger.json
  77. 18 0
      src/main/resources/data/km/recipes/dagger/copper_dagger.json
  78. 18 0
      src/main/resources/data/km/recipes/dagger/diamond_dagger.json
  79. 18 0
      src/main/resources/data/km/recipes/dagger/golden_dagger.json
  80. 18 0
      src/main/resources/data/km/recipes/dagger/iron_dagger.json
  81. 18 0
      src/main/resources/data/km/recipes/dagger/stone_dagger.json
  82. 18 0
      src/main/resources/data/km/recipes/dagger/wooden_dagger.json
  83. 9 0
      src/main/resources/data/km/recipes/food/fried_egg.json
  84. 9 0
      src/main/resources/data/km/recipes/food/fried_egg_from_campfire_cooking.json
  85. 9 0
      src/main/resources/data/km/recipes/food/fried_egg_from_smoking.json
  86. 9 0
      src/main/resources/data/km/recipes/food/mushroom_stick_cooked.json
  87. 9 0
      src/main/resources/data/km/recipes/food/mushroom_stick_cooked_from_campfire_cooking.json
  88. 9 0
      src/main/resources/data/km/recipes/food/mushroom_stick_cooked_from_smoking.json
  89. 20 0
      src/main/resources/data/km/recipes/food/mushroom_stick_raw.json
  90. 19 0
      src/main/resources/data/km/recipes/hammer/bronze_hammer.json
  91. 19 0
      src/main/resources/data/km/recipes/hammer/copper_hammer.json
  92. 19 0
      src/main/resources/data/km/recipes/hammer/diamond_hammer.json
  93. 19 0
      src/main/resources/data/km/recipes/hammer/golden_hammer.json
  94. 19 0
      src/main/resources/data/km/recipes/hammer/iron_hammer.json
  95. 19 0
      src/main/resources/data/km/recipes/hammer/stone_hammer.json
  96. 19 0
      src/main/resources/data/km/recipes/hammer/wooden_hammer.json
  97. 17 0
      src/main/resources/data/km/recipes/hay_bundle.json
  98. 19 0
      src/main/resources/data/km/recipes/hoe/bronze_hoe.json
  99. 19 0
      src/main/resources/data/km/recipes/hoe/copper_hoe.json
  100. 0 0
      src/main/resources/data/km/recipes/ingot/bronze_ingot.json

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

@@ -118,7 +118,7 @@ public class Server
         MinecraftForge.EVENT_BUS.register(new ProtectionEvents(protection, perms));
         MinecraftForge.EVENT_BUS.register(new BlockProtectionEvents(blockProtection, perms));
         
-        PlayerManager playerManager = new PlayerManager(logger, playerBank, server, scriptEvents);
+        PlayerManager playerManager = new PlayerManager(logger, playerBank);
         MinecraftForge.EVENT_BUS.register(playerManager);
         CustomEventCaller customEventCaller = new CustomEventCaller(playerManager, server, scheduler);
         scripts.setCustomEventCaller(customEventCaller);
@@ -135,7 +135,7 @@ public class Server
             scriptBank = new ScriptBank(databank, playerManager);
         }
         MinecraftFunctions.registerFunctions(
-                scripts.getScriptManager(), scripts, perms, scheduler, server, playerBank, playerManager, 
+                scripts.getScriptManager(), scripts, perms, scheduler, server, playerBank, 
                 customEventCaller, scriptBank, databank, blockProtection, protection);
         scripts.startScript("startscript");
     }

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

@@ -6,7 +6,7 @@ import net.minecraft.world.World;
 
 public class EntityBlackBear extends PolarBearEntity
 {
-    public EntityBlackBear(EntityType type, World w) 
+    public EntityBlackBear(EntityType<EntityBlackBear> type, World w) 
     {
         super(ModEntities.BLACK_BEAR, w);
     }

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

@@ -6,7 +6,7 @@ import net.minecraft.world.World;
 
 public class EntityBrownBear extends PolarBearEntity
 {
-    public EntityBrownBear(EntityType type, World w) 
+    public EntityBrownBear(EntityType<EntityBrownBear> type, World w) 
     {
         super(ModEntities.BROWN_BEAR, w);
     }

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

@@ -35,7 +35,6 @@ public class EntityHuman extends CreatureEntity
     private final float originalWidth;
     private final float originalHeight;
     private EntitySize size;
-    private float lastScale = 1.0f;
     
     public EntityHuman(EntityType<EntityHuman> type, World w)
     {
@@ -75,7 +74,6 @@ public class EntityHuman extends CreatureEntity
     
     public final void setScale(float scale)
     {
-        lastScale = scale;
         this.getDataManager().set(SCALE, scale);
         this.setSize(originalWidth * scale, originalHeight * scale);
     }
@@ -97,9 +95,7 @@ public class EntityHuman extends CreatureEntity
     @OnlyIn(Dist.CLIENT)
     public ResourceLocation getTexture()
     {
-        String name = getSkinName();
-        org.apache.logging.log4j.LogManager.getLogger().warn(name);
-        return HumanSkinLoader.INSTANCE.getTexture(name);
+        return HumanSkinLoader.INSTANCE.getTexture(getSkinName());
     }
     
     @Override
@@ -274,11 +270,6 @@ public class EntityHuman extends CreatureEntity
     @Override
     public EntitySize getSize(Pose poseIn)
     {
-        float scale = getScale();
-        if(scale != lastScale)
-        {
-            setScale(scale);
-        }
         return size;
     }
     
@@ -286,4 +277,14 @@ public class EntityHuman extends CreatureEntity
     {
         size = EntitySize.fixed(w, h);
     }
+
+    @Override
+    public void notifyDataManagerChange(DataParameter<?> key)
+    {
+        super.notifyDataManagerChange(key);
+        if(key == SCALE)
+        {
+            setScale(getScale());
+        }
+    }
 }

+ 24 - 184
src/main/java/me/km/entities/EntityNobody.java

@@ -1,166 +1,33 @@
 package me.km.entities;
 
-import net.minecraft.block.BlockState;
+import java.util.Collections;
 import net.minecraft.entity.Entity;
 import net.minecraft.entity.EntityType;
-import net.minecraft.entity.MoverType;
-import net.minecraft.entity.effect.LightningBoltEntity;
-import net.minecraft.nbt.CompoundNBT;
-import net.minecraft.network.IPacket;
-import net.minecraft.network.play.server.SSpawnObjectPacket;
-import net.minecraft.util.SoundEvent;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Vec3d;
-import net.minecraft.util.text.ITextComponent;
-import net.minecraft.util.text.StringTextComponent;
+import net.minecraft.entity.LivingEntity;
+import net.minecraft.inventory.EquipmentSlotType;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.DamageSource;
+import net.minecraft.util.HandSide;
 import net.minecraft.world.World;
-import net.minecraftforge.api.distmarker.Dist;
-import net.minecraftforge.api.distmarker.OnlyIn;
 
-public class EntityNobody extends Entity
+public class EntityNobody extends LivingEntity
 {
-    public EntityNobody(EntityType<EntityNobody> type, World w)
+    public EntityNobody(EntityType<EntityNobody> type, World p_i48577_2_)
     {
-        super(type, w);
+        super(type, p_i48577_2_);
     }
 
     @Override
-    public void tick()
-    {
-        this.baseTick();
-    }
-
-    @Override
-    public void baseTick()
-    {
-        if(this.isPassenger() && this.getRidingEntity().removed) 
-        {
-            this.stopRiding();
-        }
-
-        if(this.rideCooldown > 0)
-        {
-            --this.rideCooldown;
-        }
-
-        if(this.posY < -64.0D)
-        {
-            this.outOfWorld();
-        }
-
-        this.firstUpdate = false;
-    }
-
-    @Override
-    public void move(MoverType type, Vec3d pos)
-    {
-    }
-
-    @Override
-    protected void doBlockCollisions()
-    {
-    }
-
-    @Override
-    public void playSound(SoundEvent soundIn, float volume, float pitch)
-    {
-    }
-
-    @Override
-    public boolean isSilent()
-    {
-        return true;
-    }
-
-    @Override
-    public void setSilent(boolean isSilent)
-    {
-    }
-
-    @Override
-    public boolean hasNoGravity()
-    {
-        return true;
-    }
-
-    @Override
-    public void setNoGravity(boolean noGravity)
-    {
-    }
-
-    @Override
-    protected boolean canTriggerWalking()
-    {
-        return false;
-    }
-
-    @Override
-    protected void updateFallState(double y, boolean onGroundIn, BlockState state, BlockPos pos)
-    {
-    }
-
-    @Override
-    protected void dealFireDamage(int amount)
-    {
-    }
-
-    @Override
-    public boolean isWet()
-    {
-        return false;
-    }
-
-    @Override
-    public boolean isInWater()
-    {
-        return false;
-    }
-
-    @Override
-    public boolean handleWaterMovement()
-    {
-        return false;
-    }
-
-    @Override
-    protected void doWaterSplashEffect()
-    {
-    }
-
-    @Override
-    public void spawnRunningParticles()
-    {
-    }
-
-    @Override
-    protected void createRunningParticles()
-    {
-    }
-    
-    @Override
-    public boolean isInLava()
+    public boolean attackEntityFrom(DamageSource source, float amount)
     {
         return false;
     }
 
     @Override
-    public void moveRelative(float p_213309_1_, Vec3d relative)
+    public void knockBack(Entity entityIn, float strength, double xRatio, double zRatio)
     {
     }
 
-    @OnlyIn(Dist.CLIENT)
-    @Override
-    public int getBrightnessForRender()
-    {
-        return 0;
-    }
-
-    @Override
-    public float getBrightness()
-    {
-        return 0;
-    }
-
     @Override
     public void applyEntityCollision(Entity entityIn)
     {
@@ -170,71 +37,44 @@ public class EntityNobody extends Entity
     public void addVelocity(double x, double y, double z)
     {
     }
-
-    @Override
-    public void setPortal(BlockPos pos)
-    {
-    }
-
-    @Override
-    public void onStruckByLightning(LightningBoltEntity lightningBolt)
-    {
-    }
-
-    @Override
-    protected void pushOutOfBlocks(double x, double y, double z)
-    {
-    }
-
-    @Override
-    public ITextComponent getName()
-    {
-        if(this.hasCustomName())
-        {
-            return this.getCustomName();
-        }
-        return new StringTextComponent("Nobody");
-    }
-
+    
     @Override
-    public boolean isPushedByWater()
+    public Iterable<ItemStack> getArmorInventoryList()
     {
-        return true;
+        return Collections.EMPTY_LIST;
     }
 
     @Override
-    protected void registerData()
+    public ItemStack getItemStackFromSlot(EquipmentSlotType est)
     {
-        
+        return ItemStack.EMPTY;
     }
 
     @Override
-    protected void readAdditional(CompoundNBT nbttc)
+    public void setItemStackToSlot(EquipmentSlotType est, ItemStack is)
     {
-        
     }
 
     @Override
-    protected void writeAdditional(CompoundNBT nbttc)
+    public HandSide getPrimaryHand()
     {
-        
+        return HandSide.LEFT;
     }
 
     @Override
-    public CompoundNBT serializeNBT()
+    public boolean canBeCollidedWith()
     {
-        return new CompoundNBT();
+        return false;
     }
 
     @Override
-    public void deserializeNBT(CompoundNBT t)
+    protected void collideWithEntity(Entity entityIn)
     {
-        
     }
 
     @Override
-    public IPacket<?> createSpawnPacket()
+    public boolean isCustomNameVisible()
     {
-        return new SSpawnObjectPacket(this);
+        return true;
     }
 }

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

@@ -13,12 +13,12 @@ public class ModEntities
 {
     public static final EntityType<EntityHuman> HUMAN = 
             (EntityType<EntityHuman>) EntityType.Builder.create(EntityHuman::new, EntityClassification.CREATURE)
-                    .size(0.6F, 1.8F)
+                    .size(0.6f, 1.8f)
                     .build(String.format("%s:human", KajetansMod.MODID))
                     .setRegistryName(KajetansMod.MODID, "human");
     public static final EntityType<EntityNobody> NOBODY = 
             (EntityType<EntityNobody>) EntityType.Builder.create(EntityNobody::new, EntityClassification.MISC)
-                    .size(0.0f, 0.0f)
+                    .size(0.5f, 0.5f)
                     .build(String.format("%s:nobody", KajetansMod.MODID))
                     .setRegistryName(KajetansMod.MODID, "nobody");
     public static final EntityType<EntityBrownBear> BROWN_BEAR = 

+ 7 - 14
src/main/java/me/km/entities/RenderNobody.java

@@ -1,29 +1,22 @@
 package me.km.entities;
 
-import me.km.KajetansMod;
 import net.minecraft.client.renderer.entity.EntityRenderer;
 import net.minecraft.client.renderer.entity.EntityRendererManager;
 import net.minecraft.util.ResourceLocation;
+import net.minecraftforge.api.distmarker.Dist;
+import net.minecraftforge.api.distmarker.OnlyIn;
 
+@OnlyIn(Dist.CLIENT)
 public class RenderNobody extends EntityRenderer<EntityNobody>
 {
-    private static final ResourceLocation LOC = new ResourceLocation(KajetansMod.MODID, "nobody");
-    
     public RenderNobody(EntityRendererManager erm)
     {
         super(erm);
-        super.setRenderOutlines(false);
     }
-    
-    @Override
-    protected ResourceLocation getEntityTexture(EntityNobody entity) 
-    {
-        return LOC;
-    }
-    
+
     @Override
-    protected boolean canRenderName(EntityNobody entity)
+    protected ResourceLocation getEntityTexture(EntityNobody entity)
     {
-        return true;
+        return null;
     }
-}
+}

+ 0 - 20
src/main/java/me/km/events/ArrowHitGroundEvent.java

@@ -1,20 +0,0 @@
-package me.km.events;
-
-import net.minecraft.entity.projectile.ArrowEntity;
-import net.minecraftforge.event.entity.EntityEvent;
-
-public class ArrowHitGroundEvent extends EntityEvent
-{
-    private final ArrowEntity arrow;
-    
-    public ArrowHitGroundEvent(ArrowEntity arrow) 
-    {
-        super(arrow);
-        this.arrow = arrow;
-    }
-
-    public ArrowEntity getArrow() 
-    {
-        return arrow;
-    }
-}

+ 36 - 0
src/main/java/me/km/events/CommandEvent.java

@@ -0,0 +1,36 @@
+package me.km.events;
+
+import net.minecraft.entity.player.PlayerEntity;
+
+public class CommandEvent
+{
+    private final PlayerEntity p;
+    private final String command;
+    private boolean cancel = false;
+    
+    public CommandEvent(PlayerEntity p, String command)
+    {
+        this.p = p;
+        this.command = command;
+    }
+
+    public PlayerEntity getPlayer()
+    {
+        return p;
+    }
+    
+    public String getName()
+    {
+        return command;
+    }
+    
+    public void setCanceled(boolean b)
+    {
+        cancel = b;
+    }
+
+    public boolean isCanceled()
+    {
+        return cancel;
+    }
+}

+ 0 - 49
src/main/java/me/km/events/CustomEventCaller.java

@@ -1,26 +1,17 @@
 package me.km.events;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedList;
 import me.hammerle.snuviscript.code.Script;
 import me.km.DamageUtils;
 import me.km.playerbank.PlayerManager;
 import me.km.scheduler.SnuviScheduler;
-import me.km.scoreboard.ScoreboardUtils;
 import me.km.utils.ReflectionUtils;
-import net.minecraft.entity.Entity;
 import net.minecraft.entity.LivingEntity;
 import net.minecraft.entity.SharedMonsterAttributes;
-import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.entity.projectile.ArrowEntity;
-import net.minecraft.entity.projectile.ThrowableEntity;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.CombatRules;
 import net.minecraft.util.DamageSource;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.event.entity.EntityJoinWorldEvent;
 import net.minecraftforge.event.entity.living.LivingHurtEvent;
 import net.minecraftforge.eventbus.api.EventPriority;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
@@ -28,8 +19,6 @@ import net.minecraftforge.fml.common.gameevent.TickEvent;
 
 public class CustomEventCaller 
 {
-    private final ArrayList<ArrowEntity> arrows = new ArrayList<>();
-
     private final HashMap<Integer, PlayerMoveData> moveData = new HashMap<>();
     
     private final LinkedList<Integer> removeQueue = new LinkedList<>();
@@ -74,8 +63,6 @@ public class CustomEventCaller
         if(e.phase == TickEvent.Phase.END)
         {
             scheduler.tick();
-            pManager.tickPlayerData();
-            ScoreboardUtils.update(server);
             if(!addQueue.isEmpty())
             {
                 addQueue.forEach(data -> moveData.put(data.getId(), data));
@@ -98,42 +85,6 @@ public class CustomEventCaller
                 removeQueue.forEach(i -> moveData.remove(i));
                 removeQueue.clear();
             }
-            
-            arrows.removeIf(arrow -> 
-            {
-                if(ReflectionUtils.getArrowTimeInGround(arrow) >= 1)
-                {
-                    MinecraftForge.EVENT_BUS.post(new ArrowHitGroundEvent(arrow));
-                    return true;
-                }
-                return false;
-            });
-        }
-    } 
-    
-    @SubscribeEvent
-    public void onArrowLaunch(EntityJoinWorldEvent e)
-    {       
-        Entity ent = e.getEntity();
-        if(ent instanceof ThrowableEntity)
-        {
-            ThrowableEntity thrown = (ThrowableEntity) ent;
-            if(thrown.getThrower() instanceof PlayerEntity)
-            {
-                MinecraftForge.EVENT_BUS.post(new ThrowableLaunchEvent((PlayerEntity) thrown.getThrower(), thrown, e.getWorld()));
-            }
-        }
-    }
-    
-    @SubscribeEvent
-    public void onPlayerHurt(LivingHurtEvent e)
-    {      
-        if(e.getEntityLiving() instanceof ServerPlayerEntity && !(e instanceof PlayerHurtEvent))
-        {
-            PlayerHurtEvent hurt = new PlayerHurtEvent((ServerPlayerEntity) e.getEntityLiving(), e.getSource(), e.getAmount());
-            MinecraftForge.EVENT_BUS.post(hurt);
-            e.setAmount(hurt.getAmount());
-            e.setCanceled(hurt.isCanceled());
         }
     } 
     

+ 0 - 23
src/main/java/me/km/events/PlayerHurtEvent.java

@@ -1,23 +0,0 @@
-package me.km.events;
-
-import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.util.DamageSource;
-import net.minecraftforge.event.entity.living.LivingHurtEvent;
-import net.minecraftforge.eventbus.api.Cancelable;
-
-@Cancelable
-public class PlayerHurtEvent extends LivingHurtEvent
-{
-    private final ServerPlayerEntity p;
-    
-    public PlayerHurtEvent(ServerPlayerEntity p, DamageSource source, float amount) 
-    {
-        super(p, source, amount);
-        this.p = p;
-    }
-
-    public ServerPlayerEntity getPlayer() 
-    {
-        return p;
-    }
-}

+ 30 - 0
src/main/java/me/km/events/PlayerTabListNameEvent.java

@@ -0,0 +1,30 @@
+package me.km.events;
+
+import me.km.overrides.ModEntityPlayerMP;
+
+public class PlayerTabListNameEvent
+{
+    private final ModEntityPlayerMP p;
+    private String name;
+    
+    public PlayerTabListNameEvent(ModEntityPlayerMP p)
+    {
+        this.p = p;
+        this.name = p.getName().getString();
+    }
+
+    public ModEntityPlayerMP getPlayer()
+    {
+        return p;
+    }
+    
+    public String getName()
+    {
+        return name;
+    }
+    
+    public void setName(String name)
+    {
+        this.name = name;
+    }
+}

+ 0 - 29
src/main/java/me/km/events/ThrowableLaunchEvent.java

@@ -1,29 +0,0 @@
-package me.km.events;
-
-import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.entity.projectile.ThrowableEntity;
-import net.minecraft.world.World;
-import net.minecraftforge.event.entity.player.PlayerEvent;
-
-public class ThrowableLaunchEvent extends PlayerEvent 
-{
-    private final ThrowableEntity thrown;
-    private final World world;
-    
-    public ThrowableLaunchEvent(PlayerEntity player, ThrowableEntity thrown, World world) 
-    {
-        super(player);
-        this.thrown = thrown;
-        this.world = world;
-    }
-
-    public ThrowableEntity getThrowable() 
-    {
-        return thrown;
-    }
-
-    public World getWorld() 
-    {
-        return world;
-    }
-}

+ 0 - 6
src/main/java/me/km/exception/EntityNotFoundException.java

@@ -1,6 +0,0 @@
-package me.km.exception;
-
-public class EntityNotFoundException extends RuntimeException
-{
-    
-}

+ 0 - 9
src/main/java/me/km/exception/IllegalItemStackStringException.java

@@ -1,9 +0,0 @@
-package me.km.exception;
-
-public class IllegalItemStackStringException extends IllegalStringException
-{
-    public IllegalItemStackStringException(String s) 
-    {
-        super(s);
-    }
-}

+ 0 - 9
src/main/java/me/km/exception/IllegalLocationStringException.java

@@ -1,9 +0,0 @@
-package me.km.exception;
-
-public class IllegalLocationStringException extends IllegalStringException
-{
-    public IllegalLocationStringException(String s) 
-    {
-        super(s);
-    }
-}

+ 0 - 9
src/main/java/me/km/exception/IllegalStringException.java

@@ -1,9 +0,0 @@
-package me.km.exception;
-
-public class IllegalStringException extends RuntimeException
-{
-    public IllegalStringException(String s)
-    {
-        super("invalid string: " + s);
-    }
-}

+ 0 - 9
src/main/java/me/km/exception/PlayerNotFoundException.java

@@ -1,9 +0,0 @@
-package me.km.exception;
-
-public class PlayerNotFoundException extends IllegalStringException
-{    
-    public PlayerNotFoundException(String s) 
-    {
-        super(s);
-    }  
-}

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

@@ -307,48 +307,48 @@ public class ModItems
         strawHat = register(r, new ItemHat(ModArmorMaterial.STRAW, new Properties()), "straw_hat");        
         
         // sticks
-        woodenStick = register(r, newStick(ItemTier.WOOD), "wood_stick");
+        woodenStick = register(r, newStick(ItemTier.WOOD), "wooden_stick");
         stoneStick = register(r, newStick(ItemTier.STONE), "stone_stick");
         copperStick = register(r, newStick(ModItemTier.COPPER), "copper_stick");
         bronzeStick = register(r, newStick(ModItemTier.BRONZE), "bronze_stick");
         ironStick = register(r, newStick(ItemTier.IRON), "iron_stick");
-        goldStick = register(r, newStick(ItemTier.GOLD), "gold_stick");
+        goldStick = register(r, newStick(ItemTier.GOLD), "golden_stick");
         diamondStick = register(r, newStick(ItemTier.DIAMOND), "diamond_stick");
         
         // scepter
-        woodenScepter = register(r, newScepter(ItemTier.WOOD), "wood_scepter");
+        woodenScepter = register(r, newScepter(ItemTier.WOOD), "wooden_scepter");
         stoneScepter = register(r, newScepter(ItemTier.STONE), "stone_scepter");
         copperScepter = register(r, newScepter(ModItemTier.COPPER), "copper_scepter");
         bronzeScepter = register(r, newScepter(ModItemTier.BRONZE), "bronze_scepter");
         ironScepter = register(r, newScepter(ItemTier.IRON), "iron_scepter");
-        goldScepter = register(r, newScepter(ItemTier.GOLD), "gold_scepter");
+        goldScepter = register(r, newScepter(ItemTier.GOLD), "golden_scepter");
         diamondScepter = register(r, newScepter(ItemTier.DIAMOND), "diamond_scepter");
         
         // dagger
-        woodenDagger = register(r, newDagger(ItemTier.WOOD), "wood_dagger");
+        woodenDagger = register(r, newDagger(ItemTier.WOOD), "wooden_dagger");
         stoneDagger = register(r, newDagger(ItemTier.STONE), "stone_dagger");
         copperDagger = register(r, newDagger(ModItemTier.COPPER), "copper_dagger");
         bronzeDagger = register(r, newDagger(ModItemTier.BRONZE), "bronze_dagger");
         ironDagger = register(r, newDagger(ItemTier.IRON), "iron_dagger");
-        goldDagger = register(r, newDagger(ItemTier.GOLD), "gold_dagger");
+        goldDagger = register(r, newDagger(ItemTier.GOLD), "golden_dagger");
         diamondDagger = register(r, newDagger(ItemTier.DIAMOND), "diamond_dagger");
         
         // hammer
-        woodenHammer = register(r, newHammer(ItemTier.WOOD), "wood_hammer");
+        woodenHammer = register(r, newHammer(ItemTier.WOOD), "wooden_hammer");
         stoneHammer = register(r, newHammer(ItemTier.STONE), "stone_hammer");
         copperHammer = register(r, newHammer(ModItemTier.COPPER), "copper_hammer");
         bronzeHammer = register(r, newHammer(ModItemTier.BRONZE), "bronze_hammer");
         ironHammer = register(r, newHammer(ItemTier.IRON), "iron_hammer");
-        goldHammer = register(r, newHammer(ItemTier.GOLD), "gold_hammer");
+        goldHammer = register(r, newHammer(ItemTier.GOLD), "golden_hammer");
         diamondHammer = register(r, newHammer(ItemTier.DIAMOND), "diamond_hammer");
         
         // battle axe
-        woodenBattleAxe = register(r, newBattleAxe(ItemTier.WOOD), "wood_battleaxe");
+        woodenBattleAxe = register(r, newBattleAxe(ItemTier.WOOD), "wooden_battleaxe");
         stoneBattleAxe = register(r, newBattleAxe(ItemTier.STONE), "stone_battleaxe");
         copperBattleAxe = register(r, newBattleAxe(ModItemTier.COPPER), "copper_battleaxe");
         bronzeBattleAxe = register(r, newBattleAxe(ModItemTier.BRONZE), "bronze_battleaxe");
         ironBattleAxe = register(r, newBattleAxe(ItemTier.IRON), "iron_battleaxe");
-        goldBattleAxe = register(r, newBattleAxe(ItemTier.GOLD), "gold_battleaxe");
+        goldBattleAxe = register(r, newBattleAxe(ItemTier.GOLD), "golden_battleaxe");
         diamondBattleAxe = register(r, newBattleAxe(ItemTier.DIAMOND), "diamond_battleaxe");
               
         // key
@@ -356,7 +356,7 @@ public class ModItems
         copperKey = register(r, new ItemKey(ModItemTier.COPPER), "copper_key");
         bronzeKey = register(r, new ItemKey(ModItemTier.BRONZE), "bronze_key");
         ironKey = register(r, new ItemKey(ItemTier.IRON), "iron_key");
-        goldKey = register(r, new ItemKey(ItemTier.GOLD), "gold_key");
+        goldKey = register(r, new ItemKey(ItemTier.GOLD), "golden_key");
         
         // coins
         copperCoin = register(r, newItem(ItemGroup.MISC), "coin_copper");

+ 85 - 2
src/main/java/me/km/overrides/ModEntityPlayerMP.java

@@ -1,6 +1,9 @@
 package me.km.overrides;
 
 import com.mojang.authlib.GameProfile;
+import java.util.HashMap;
+import me.km.Server;
+import me.km.events.PlayerTabListNameEvent;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.management.PlayerInteractionManager;
@@ -10,19 +13,99 @@ import net.minecraft.world.ServerWorld;
 
 public class ModEntityPlayerMP extends ServerPlayerEntity
 {
+    private final PlayerScoreboard board;
+    private int id = -1;
+    private final HashMap<String, Integer> timedData;
+    private final HashMap<String, Object> data;
+    
     public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim)
     {
         super(ms, w, gp, pim);
+        this.board = new PlayerScoreboard();
+        this.timedData = new HashMap();
+        this.data = new HashMap();
+    }
+
+    public PlayerScoreboard getScoreboard()
+    {
+        return board;
+    }
+    
+    public ModEntityPlayerMP(MinecraftServer ms, ServerWorld w, GameProfile gp, PlayerInteractionManager pim, ModEntityPlayerMP old)
+    {
+        super(ms, w, gp, pim);
+        this.board = old.board;
+        this.timedData = old.timedData;
+        this.data = old.data;
+    }
+
+    @Override
+    public void tick()
+    {
+        super.tick();
+        board.update(this);
+        tickData();
     }
 
     @Override
     public ITextComponent getTabListDisplayName()
     {
-        return new StringTextComponent("wusi");
+        PlayerTabListNameEvent e = new PlayerTabListNameEvent(this);
+        Server.scriptEvents.onGetPlayerName(e);
+        return new StringTextComponent(e.getName());
+    }
+    
+    public void setId(int id)
+    {
+        this.id = id;
     }
     
     public int getId()
     {
-        return -1;
+        return id;
+    }
+    
+    private void tickData()
+    {
+        timedData.entrySet().removeIf(entry -> 
+        {
+            int time = entry.getValue() - 1;
+            if(time <= 0)
+            {
+                if(time == 0)
+                {
+                    Server.scriptEvents.onPlayerDataTick(this, entry.getKey());
+                }
+                return true;
+            }
+            entry.setValue(time);
+            return false;
+        });
+    }
+    
+    public void setVar(String varname, Object value)
+    {
+        data.put(varname, value);
+    }
+    
+    public Object getVar(String varname)
+    {
+        return data.get(varname);
+    }
+    
+    public void setTimer(String varname, int time)
+    {
+        timedData.put(varname, time);
+    }
+    
+    public int getTimer(String varname)
+    {
+        return timedData.getOrDefault(varname, -1);
+    }
+    
+    public void clearData()
+    {
+        timedData.clear();
+        data.clear();
     }
 }

+ 4 - 2
src/main/java/me/km/overrides/ModPlayerList.java

@@ -3,12 +3,13 @@ package me.km.overrides;
 import com.google.common.collect.Lists;
 import com.mojang.authlib.GameProfile;
 import io.netty.buffer.Unpooled;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.UUID;
 import me.hammerle.snuviscript.code.ISnuviScheduler;
-import me.km.KajetansMod;
+import me.km.Server;
 import me.km.networking.ModPacketHandler;
 import me.km.utils.ReflectionUtils;
 import net.minecraft.entity.Entity;
@@ -242,6 +243,7 @@ public class ModPlayerList extends DedicatedPlayerList
     @Override
     public ServerPlayerEntity recreatePlayerEntity(ServerPlayerEntity pIn, DimensionType dim, boolean conqueredEnd)
     {
+        Server.scriptEvents.onPlayerPreRespawn(pIn);
         ServerWorld world = server.getWorld(dim);
         if(world == null)
         {
@@ -271,7 +273,7 @@ public class ModPlayerList extends DedicatedPlayerList
             playerinteractionmanager = new PlayerInteractionManager(this.server.getWorld(pIn.dimension));
         }
 
-        ServerPlayerEntity p = new ModEntityPlayerMP(this.server, this.server.getWorld(pIn.dimension), pIn.getGameProfile(), playerinteractionmanager);
+        ServerPlayerEntity p = new ModEntityPlayerMP(this.server, this.server.getWorld(pIn.dimension), pIn.getGameProfile(), playerinteractionmanager, (ModEntityPlayerMP) pIn);
         p.connection = pIn.connection;
         p.copyFrom(pIn, conqueredEnd);
         pIn.remove(false); // Forge: clone event had a chance to see old data, now discard it

+ 12 - 17
src/main/java/me/km/scoreboard/PlayerScoreboard.java → src/main/java/me/km/overrides/PlayerScoreboard.java

@@ -1,8 +1,7 @@
-package me.km.scoreboard;
+package me.km.overrides;
 
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.UUID;
 import net.minecraft.entity.player.ServerPlayerEntity;
 import net.minecraft.network.play.server.SDisplayObjectivePacket;
 import net.minecraft.network.play.server.SScoreboardObjectivePacket;
@@ -12,7 +11,6 @@ import net.minecraft.scoreboard.ScoreCriteria.RenderType;
 import net.minecraft.scoreboard.ScoreObjective;
 import net.minecraft.scoreboard.Scoreboard;
 import net.minecraft.scoreboard.ServerScoreboard.Action;
-import net.minecraft.server.MinecraftServer;
 import net.minecraft.util.text.StringTextComponent;
 
 public class PlayerScoreboard 
@@ -24,14 +22,12 @@ public class PlayerScoreboard
     private final Scoreboard board = new Scoreboard();
     private final ScoreObjective o;
     private boolean changeNeeded = true;
+    
+    private boolean init = true;
 
-    private final UUID uuid;
-
-    public PlayerScoreboard(ServerPlayerEntity p)
+    public PlayerScoreboard()
     {
         o = new ScoreObjective(board, "ScoreBoardAPI", ScoreCriteria.DUMMY, new StringTextComponent("§6---------------"), RenderType.INTEGER);
-        this.uuid = p.getUniqueID();
-        p.connection.sendPacket(new SScoreboardObjectivePacket(o, 0));
     }
 
     public void addText(int id, String text)
@@ -59,24 +55,23 @@ public class PlayerScoreboard
         }
     }
 
-    public void clear(MinecraftServer server)
+    public void clear(ServerPlayerEntity p)
     {
         elements.keySet().forEach(i -> toRemove.add(i));
-        update(server);
+        changeNeeded = true;
+        update(p);
     }
 
-    public boolean update(MinecraftServer server)
+    public boolean update(ServerPlayerEntity p)
     {         
         if(!changeNeeded)
         {
             return false;
         }
-
-        ServerPlayerEntity p = server.getPlayerList().getPlayerByUUID(uuid);
-
-        if(p == null)
+        if(init)
         {
-            return true;
+            init = false;
+            p.connection.sendPacket(new SScoreboardObjectivePacket(o, 0));
         }
 
         if(!toRemove.isEmpty())
@@ -86,7 +81,7 @@ public class PlayerScoreboard
                 String s = elements.remove(i);
                 if(s != null)
                 {
-                    p.connection.sendPacket(new SUpdateScorePacket(Action.REMOVE, null, null, -1));
+                    p.connection.sendPacket(new SUpdateScorePacket(Action.REMOVE, o.getName(), s, -1));
                 }
             });
             toRemove.clear();

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

@@ -17,11 +17,11 @@ public abstract class Command
     
     public void sendMessage(ICommandSource cs, String message)
     {
-        cs.sendMessage(new StringTextComponent(message));
+        cs.sendMessage(new StringTextComponent(String.format("[§dScript§r] %s", message)));
     }
     
     public void sendMessage(ICommandSource cs, String message1, String message2)
     {
-        cs.sendMessage(new StringTextComponent(String.format(" - %s %s", message1, message2)));
+        cs.sendMessage(new StringTextComponent(String.format("§d - %s§r %s", message1, message2)));
     }
 }

+ 12 - 1
src/main/java/me/km/permissions/ModCommandManager.java

@@ -3,7 +3,8 @@ package me.km.permissions;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import me.km.KajetansMod;
+import me.km.Server;
+import me.km.events.CommandEvent;
 import me.km.snuviscript.ScriptEvents;
 import me.km.snuviscript.Scripts;
 import net.minecraft.command.CommandSource;
@@ -134,6 +135,16 @@ public class ModCommandManager extends Commands
         {
             if(perms.hasPermission(cs, commandName))
             {
+                Entity ent = cs.getEntity();
+                if(ent != null && ent instanceof PlayerEntity)
+                {
+                    CommandEvent e = new CommandEvent((PlayerEntity) ent, commandName);
+                    events.onCommand(e);
+                    if(e.isCanceled())
+                    {
+                        return 0;
+                    }
+                }
                 return super.handleCommand(cs, rawCommand);
             }
             events.onMissingPermission(getSource(cs), commandName);

+ 8 - 116
src/main/java/me/km/playerbank/PlayerManager.java

@@ -1,50 +1,26 @@
 package me.km.playerbank;
 
-import java.util.HashMap;
-import java.util.UUID;
 import me.hammerle.snuviscript.code.ISnuviLogger;
-import me.km.scoreboard.ScoreboardUtils;
-import me.km.snuviscript.ScriptEvents;
-import net.minecraft.entity.player.PlayerEntity;
-import net.minecraft.server.MinecraftServer;
+import me.km.overrides.ModEntityPlayerMP;
 import net.minecraftforge.eventbus.api.EventPriority;
 import net.minecraftforge.eventbus.api.SubscribeEvent;
 import net.minecraftforge.fml.common.gameevent.PlayerEvent;
 
 public class PlayerManager
 {
-    private final HashMap<UUID, Integer> playerIds = new HashMap<>();
-    
-    private final HashMap<UUID, HashMap<String, Object>> playerData = new HashMap<>();
-    private final HashMap<UUID, HashMap<String, Integer>> playerTickData = new HashMap<>();
-    
     private final ISnuviLogger logger;
     private final IPlayerBank bank;
-    private final MinecraftServer server;
-    private final ScriptEvents events;
     
-    public PlayerManager(ISnuviLogger logger, IPlayerBank bank, MinecraftServer server, ScriptEvents events) 
+    public PlayerManager(ISnuviLogger logger, IPlayerBank bank) 
     {
         this.logger = logger;
         this.bank = bank;
-        this.server = server;
-        this.events = events;
-    }
-    
-    public synchronized int getPlayerId(UUID uuid)
-    {
-        Integer i = playerIds.get(uuid);
-        if(i != null)
-        {
-            return i;
-        }
-        return bank.getId(uuid);
     }
     
     @SubscribeEvent(priority = EventPriority.HIGH)
     public void onPlayerJoin(PlayerEvent.PlayerLoggedInEvent e)
     {
-        PlayerEntity p = e.getPlayer();
+        ModEntityPlayerMP p = (ModEntityPlayerMP) e.getPlayer();
         if(p == null)
         {
             return;
@@ -54,107 +30,23 @@ public class PlayerManager
         if(id == -1)
         {
             bank.add(p.getUniqueID(), p.getName().getUnformattedComponentText());
-            logger.print(String.format("'%s' was added", p.getName()));
+            logger.print(String.format("'%s' was added", p.getName().getString()));
             
             id = bank.getId(p.getUniqueID());
             if(id == -1)
             {
                 // this should never happen
-                logger.print(String.format("'%s' has no id", p.getName()));
+                logger.print(String.format("'%s' has no id", p.getName().getString()));
             }
             else
             {
-                playerIds.put(p.getUniqueID(), id);
+                p.setId(id);
             }
         }
         else
         {
-            playerIds.put(p.getUniqueID(), id);
-            bank.changeName(p.getUniqueID(), p.getName().getUnformattedComponentText());
+            p.setId(id);
+            bank.changeName(p.getUniqueID(), p.getName().getString());
         }
     }
-    
-    @SubscribeEvent(priority = EventPriority.LOW)
-    public void onPlayerLeaveCleanup(PlayerEvent.PlayerLoggedOutEvent e)
-    {      
-        UUID uuid = e.getPlayer().getUniqueID();
-        ScoreboardUtils.remove(uuid);
-        playerIds.remove(uuid);
-        playerData.remove(uuid);
-        playerTickData.remove(uuid);
-    }
-    
-    public void tickPlayerData()
-    {
-        playerTickData.forEach((uuid, map) -> 
-        {
-            PlayerEntity p = server.getPlayerList().getPlayerByUUID(uuid);
-            if(p == null)
-            {
-                return;
-            }
-            map.entrySet().removeIf(entry -> 
-            {
-                int time = entry.getValue() - 1;
-                if(time <= 0)
-                {
-                    if(time == 0)
-                    {
-                        events.onPlayerDataTick(p, entry.getKey());
-                    }
-                    return true;
-                }
-                entry.setValue(time);
-                return false;
-            });
-        });
-    }
-    
-    public void setPlayerVar(UUID uuid, String varname, Object value)
-    {
-        HashMap<String, Object> map = playerData.get(uuid);
-        if(map == null)
-        {
-            map = new HashMap<>();
-            playerData.put(uuid, map);
-        }
-        map.put(varname, value);
-    }
-    
-    public Object getPlayerVar(UUID uuid, String varname)
-    {
-        HashMap<String, Object> map = playerData.get(uuid);
-        if(map == null)
-        {
-            return null;
-        }
-        return map.get(varname);
-    }
-    
-    public void setPlayerTimer(UUID uuid, String varname, int time)
-    {
-        HashMap<String, Integer> map = playerTickData.get(uuid);
-        if(map == null)
-        {
-            map = new HashMap<>();
-            playerTickData.put(uuid, map);
-        }
-        map.put(varname, time);
-    }
-    
-    public int getPlayerTimer(UUID uuid, String varname)
-    {
-        HashMap<String, Integer> map = playerTickData.get(uuid);
-        if(map == null)
-        {
-            return -1;
-        }
-        return map.getOrDefault(varname, -1);
-    }
-    
-    public void clearPlayerData(UUID uuid)
-    {
-        playerTickData.remove(uuid);
-        playerData.remove(uuid);
-    }
 }

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

@@ -1,127 +0,0 @@
-package me.km.recipes;
-
-/*import java.util.HashMap;
-import me.km.blocks.ModBlocks;
-import me.km.items.ModItems;
-import net.minecraft.block.Block;
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraft.item.crafting.FurnaceRecipe;
-import net.minecraft.item.crafting.IRecipe;
-import net.minecraft.item.crafting.Ingredient;
-import net.minecraft.item.crafting.ShapedRecipe;
-import net.minecraft.item.crafting.ShapelessRecipe;
-import net.minecraft.util.NonNullList;
-import net.minecraftforge.registries.IForgeRegistry;*/
-
-public class ModRecipes 
-{           
-
-    // -----------------------------------------------------------------------------------
-    // init recipes
-    // -----------------------------------------------------------------------------------
-    
-    /*private static int id = 0;
-
-        // misc
-        registerShapeless(r, "", new ItemStack(Items.STRING, 4), new ItemStack[][] 
-        {
-            {new ItemStack(Blocks.WOOL)}
-        });
-        registerShaped(r, "", new String[] {"XXX", "XSX", " I "}, new ItemStack(Items.SADDLE), 
-                new char[] {'X', 'S', 'I'}, new ItemStack[][] 
-                {
-                    {new ItemStack(Items.LEATHER)},
-                    {new ItemStack(Items.STRING)},
-                    {new ItemStack(Items.IRON_INGOT)}
-                });
-        registerShaped(r, "", new String[] {"XXX", "XXX", "XXX"}, new ItemStack(ModItems.hayBundle, 9), 
-                new char[] {'X'}, new ItemStack[][] {{new ItemStack(Blocks.TALLGRASS, 1, 1), new ItemStack(Blocks.TALLGRASS, 1, 2)}});
-        registerShaped(r, "", new String[] {" X ", "XXX"}, new ItemStack(ModItems.strawHat), 
-                new char[] {'X'}, new ItemStack[][] {{new ItemStack(Items.WHEAT)}});
-                
-        // 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);
-        addArmorNuggetRecipes(fr, armorItems, ModItems.copperNugget, ModItems.bronzeNugget);
-        
-        // 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[][] 
-        {
-            {ModItems.copperIngot, new ItemStack(ModItems.copperNugget, 9)}, 
-            {ModItems.tinIngot, new ItemStack(ModItems.tinNugget, 9)}, 
-            {ModItems.bronzeIngot, new ItemStack(ModItems.bronzeNugget, 9)}, 
-            {ModItems.silverIngot, new ItemStack(ModItems.silverNugget, 9)}, 
-        };
-        addIngotRecipes(r, ingotItems);
-        
-        // tool nuggets
-        toolItems = new Object[][] 
-        {
-            {ModItems.copperPickaxe, ModItems.copperShovel, ModItems.copperAxe, ModItems.copperHoe, ModItems.copperSword, ModItems.copperStick, ModItems.copperDagger, ModItems.copperHammer},
-            {ModItems.bronzePickaxe, ModItems.bronzeShovel, ModItems.bronzeAxe, ModItems.bronzeHoe, ModItems.bronzeSword, ModItems.bronzeStick, ModItems.bronzeDagger, ModItems.bronzeHammer}, 
-            {ModItems.ironStick, ModItems.ironDagger, ModItems.ironHammer},
-            {ModItems.goldStick, ModItems.goldDagger, ModItems.goldHammer}
-        };
-        addToolNuggetRecipes(fr, toolItems, ModItems.copperNugget, ModItems.bronzeNugget, Items.IRON_NUGGET, Items.GOLD_NUGGET);       
-    }
-
-    */
-}

+ 0 - 33
src/main/java/me/km/scoreboard/ScoreboardUtils.java

@@ -1,33 +0,0 @@
-package me.km.scoreboard;
-
-import java.util.HashMap;
-import java.util.UUID;
-import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.server.MinecraftServer;
-
-public class ScoreboardUtils
-{
-    private final static HashMap<UUID, PlayerScoreboard> BOARDS = new HashMap<>();
-
-    public static void remove(UUID uuid)
-    {
-        BOARDS.remove(uuid);
-    }
-    
-    public static void update(MinecraftServer server)
-    {
-        BOARDS.values().removeIf(ps -> ps.update(server));
-    }
-    
-    public static PlayerScoreboard get(ServerPlayerEntity p)
-    {
-        PlayerScoreboard data = BOARDS.get(p.getUniqueID());
-        if(data == null)
-        {
-            data = new PlayerScoreboard(p);
-            BOARDS.put(p.getUniqueID(), data);
-            return data;
-        }
-        return data;
-    }
-}

+ 1 - 1
src/main/java/me/km/snuviscript/CommandGiveUp.java

@@ -45,7 +45,7 @@ public class CommandGiveUp extends Command
         Script script = scripts.getScript(p);
         if(script == null)
         {
-            sendMessage(cs, "Du hast kein Script an dich gebunden.");
+            scripts.getScriptManager().callEvent("player_no_script", (sc) -> ScriptVars.setPlayerVars(sc, p), null);
             return;
         }
         scripts.getScriptManager().callEvent("player_giveup", script, (sc) -> ScriptVars.setPlayerVars(sc, p), null);

+ 20 - 23
src/main/java/me/km/snuviscript/CommandScript.java

@@ -7,7 +7,6 @@ import me.hammerle.snuviscript.code.Script;
 import me.hammerle.snuviscript.inputprovider.Variable;
 import me.km.permissions.Command;
 import me.km.utils.Utils;
-import me.km.exception.PlayerNotFoundException;
 import net.minecraft.command.ICommandSource;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.entity.player.ServerPlayerEntity;
@@ -62,16 +61,14 @@ public class CommandScript extends Command
                 {
                     if(arg.length >= 3)
                     {
-                        try
-                        {
-                            PlayerEntity p = Utils.getPlayerByName(server, arg[1]);
-                            String[] pars = Arrays.copyOfRange(arg, 2, arg.length);
-                            scripts.startPlayerScript(p, pars);
-                        }
-                        catch(PlayerNotFoundException ex)
+                        PlayerEntity p = Utils.getPlayerByName(server, arg[1]);
+                        if(p == null)
                         {
-                            sendMessage(cs, "cannot find player '" + arg[1] + "'.");
+                            sendMessage(cs, String.format("Cannot find player '%s'", arg[1]));
+                            return;
                         }
+                        String[] pars = Arrays.copyOfRange(arg, 2, arg.length);
+                        scripts.startPlayerScript(p, pars);
                         return;
                     }
                     break;
@@ -91,11 +88,11 @@ public class CommandScript extends Command
                             Variable var = sc.getVar(arg[2]);
                             if(var != null)
                             {
-                                sendMessage(cs, arg[2] + " = " + var.get(sc));
+                                sendMessage(cs, String.format("%s = %s", arg[2], var.get(sc)));
                             }
                             else
                             {
-                                sendMessage(cs, arg[2] + " = null");
+                                sendMessage(cs, String.format("%s = null", arg[2]));
                             }
                         }
                         catch(NumberFormatException ex)
@@ -111,10 +108,10 @@ public class CommandScript extends Command
                     Collection<Script> scs = scripts.getScriptManager().getScripts();
                     if(scs.isEmpty())
                     {
-                        sendMessage(cs, "no scripts are active");
+                        sendMessage(cs, "No scripts are active");
                         return;
                     }
-                    sendMessage(cs, "following scripts are active:");
+                    sendMessage(cs, "Active scripts:");
                     scs.forEach(sc ->
                     {
                         sendMessage(cs, String.format(" - %s (%d)", sc.getName(), sc.getId()));
@@ -137,11 +134,11 @@ public class CommandScript extends Command
                                 scripts.clearPlayerRegistry();
                                 if(scripts.getScriptManager().removeScriptsSafe())
                                 {
-                                    sendMessage(cs, "all active scripts were terminated");
+                                    sendMessage(cs, "All active scripts were terminated");
                                 }
                                 else
                                 {
-                                    sendMessage(cs, "iterating is not allowed currently");
+                                    sendMessage(cs, "Iterating is not allowed currently");
                                 }
                                 return;
                             }
@@ -150,11 +147,11 @@ public class CommandScript extends Command
                             if(qd != null)
                             {
                                 scripts.getScriptManager().removeScriptSafe(qd);
-                                sendMessage(cs, String.format("script '%s' was terminated", qd.getName()));
+                                sendMessage(cs, String.format("Script '%s' was terminated", qd.getName()));
                             }
                             else
                             {
-                                sendMessage(cs, String.format("script id '%d' is not valid", id));
+                                sendMessage(cs, String.format("Script id '%d' is not valid", id));
                             }
                         }
                         catch(NumberFormatException ex)
@@ -163,7 +160,7 @@ public class CommandScript extends Command
                         } 
                         catch(Exception ex)
                         {
-                            sendMessage(cs, "exception on script termination");
+                            sendMessage(cs, "Exception on script termination");
                             ex.printStackTrace();
                         } 
                         return;
@@ -174,11 +171,11 @@ public class CommandScript extends Command
         }
         
         sendMessage(cs, "/script ...");
-        sendMessage(cs, "start <scripts...>", "Startet ein Script");
-        sendMessage(cs, "startp <player> <scripts...>", "Startet ein Script");
-        sendMessage(cs, "variable <id> <name>", "Zeigt den Wert einer Variable");       
-        sendMessage(cs, "see", "Gibt alle aktiven Scripts aus");
-        sendMessage(cs, "term <id/all>", "Entfernt Scripts aus dem RAM");
+        sendMessage(cs, "start <scripts...>", "starts a script");
+        sendMessage(cs, "startp <player> <scripts...>", "starts a player script");
+        sendMessage(cs, "variable <id> <name>", "shows the value of a variable");       
+        sendMessage(cs, "see", "shows active scripts");
+        sendMessage(cs, "term <id/all>", "terminates a script");
     }
 }
 

+ 41 - 52
src/main/java/me/km/snuviscript/MinecraftFunctions.java

@@ -19,7 +19,6 @@ import me.km.Server;
 import me.km.blockprotections.IBlockProtection;
 import me.km.databank.DataBank;
 import me.km.utils.Location;
-import me.km.utils.TitleUtils;
 import me.km.utils.Utils;
 import me.km.world.WorldManager;
 import me.km.effects.EffectUtils;
@@ -28,7 +27,6 @@ import me.km.entities.ModEntities;
 import me.km.inventory.InventoryUtils;
 import me.km.utils.ItemStackUtils;
 import me.km.utils.ReflectionUtils;
-import me.km.utils.SpecialBlockUtils;
 import net.minecraft.enchantment.Enchantment;
 import net.minecraft.enchantment.EnchantmentHelper;
 import net.minecraft.entity.Entity;
@@ -44,18 +42,15 @@ import net.minecraft.util.math.Vec3d;
 import net.minecraft.world.World;
 import me.km.events.CustomEventCaller;
 import me.km.events.PlayerMoveData;
-import me.km.exception.IllegalStringException;
-import me.km.exception.PlayerNotFoundException;
 import me.km.inventory.CustomContainer;
 import me.km.networking.ModPacketHandler;
 import me.km.overrides.ModEntityPlayerMP;
 import me.km.permissions.PermissionManager;
 import me.km.playerbank.IPlayerBank;
-import me.km.playerbank.PlayerManager;
 import me.km.plots.IProtection;
 import me.km.scheduler.SnuviScheduler;
-import me.km.scoreboard.ScoreboardUtils;
 import me.km.utils.Mapper;
+import net.minecraft.block.Block;
 import net.minecraft.block.BlockState;
 import net.minecraft.block.ChestBlock;
 import net.minecraft.block.CropsBlock;
@@ -82,6 +77,8 @@ import net.minecraft.nbt.NBTUtil;
 import net.minecraft.network.play.client.CChatMessagePacket;
 import net.minecraft.network.play.client.CClientStatusPacket;
 import net.minecraft.network.play.server.SSpawnPositionPacket;
+import net.minecraft.network.play.server.STitlePacket;
+import net.minecraft.network.play.server.SUpdateTileEntityPacket;
 import net.minecraft.potion.Effect;
 import net.minecraft.potion.EffectInstance;
 import net.minecraft.server.MinecraftServer;
@@ -114,7 +111,7 @@ public class MinecraftFunctions
     @SuppressWarnings("")
     public static void registerFunctions(ScriptManager sm, Scripts scripts, 
             PermissionManager perms, SnuviScheduler scheduler, MinecraftServer server, 
-            IPlayerBank playerBank, PlayerManager pManager, CustomEventCaller cec,
+            IPlayerBank playerBank, CustomEventCaller cec,
             IScriptBank scriptBank, DataBank dataBank, IBlockProtection blockProtection,
             IProtection protection)
     {
@@ -164,27 +161,31 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------
         sm.registerFunction("title.settime", (sc, in) -> 
         {
-            TitleUtils.setTitleTime((ServerPlayerEntity) in[0].get(sc), in[1].getInt(sc), in[2].getInt(sc), in[3].getInt(sc));
+            ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new STitlePacket(in[1].getInt(sc), in[2].getInt(sc), in[3].getInt(sc)));
             return Void.TYPE;
         });
         sm.registerFunction("title.clear", (sc, in) -> 
         { 
-            TitleUtils.clearTitle((ServerPlayerEntity) in[0].get(sc)); 
+            ServerPlayerEntity p = (ServerPlayerEntity) in[0].get(sc);
+            p.connection.sendPacket(new STitlePacket(STitlePacket.Type.CLEAR, null));
+            p.connection.sendPacket(new STitlePacket(STitlePacket.Type.RESET, null));
             return Void.TYPE; 
         });
         sm.registerFunction("title.reset", (sc, in) -> 
         { 
-            TitleUtils.resetTitle((ServerPlayerEntity) in[0].get(sc)); 
+            ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new STitlePacket(STitlePacket.Type.RESET, null));
             return Void.TYPE; 
         });
         sm.registerFunction("title.send", (sc, in) -> 
         { 
-            TitleUtils.setTitle((ServerPlayerEntity) in[0].get(sc), SnuviUtils.connect(sc, in, 1)); 
+            ITextComponent text = new StringTextComponent(SnuviUtils.connect(sc, in, 1));
+            ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new STitlePacket(STitlePacket.Type.TITLE, text));
             return Void.TYPE; 
         });
         sm.registerFunction("title.setsub", (sc, in) -> 
         { 
-            TitleUtils.setSubTitle((ServerPlayerEntity) in[0].get(sc), SnuviUtils.connect(sc, in, 1)); 
+            ITextComponent text = new StringTextComponent(SnuviUtils.connect(sc, in, 1));
+            ((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new STitlePacket(STitlePacket.Type.SUBTITLE, text));
             return Void.TYPE; 
         });
        
@@ -285,11 +286,8 @@ public class MinecraftFunctions
             }
             return playerBank.getUUID(o.toString());
         });
-        sm.registerFunction("player.getid", (sc, in) -> (double) pManager.getPlayerId(getUUID(in[0].get(sc))));
-        sm.registerFunction("player.get", (sc, in) -> 
-        { 
-            return server.getPlayerList().getPlayerByUUID(getUUID(in[0].get(sc)));
-        });
+        sm.registerFunction("player.getid", (sc, in) -> getId(playerBank, in[0].get(sc)));
+        sm.registerFunction("player.get", (sc, in) -> server.getPlayerList().getPlayerByUUID(getUUID(in[0].get(sc))));
         sm.registerFunction("player.getuuidfromid", (sc, in) -> playerBank.getUUIDfromID(in[0].getInt(sc)));
         sm.registerFunction("player.getnamefromid", (sc, in) -> playerBank.getNamefromID(in[0].getInt(sc)));
         sm.registerFunction("player.getip", (sc, in) -> ((ServerPlayerEntity) in[0].get(sc)).connection.netManager.getRemoteAddress().toString());
@@ -647,12 +645,12 @@ public class MinecraftFunctions
             {            
                 stack.setCount(stack.getMaxStackSize());
                 amount -= stack.getMaxStackSize();
-                ItemStackUtils.drop(w, pos, stack.copy());
+                Block.spawnAsEntity(w, pos, stack.copy());
             }
             if(amount > 0)
             {
                 stack.setCount(amount);
-                ItemStackUtils.drop(w, pos, stack);
+                Block.spawnAsEntity(w, pos, stack);
             }
             return Void.TYPE; 
         });                  
@@ -677,7 +675,7 @@ public class MinecraftFunctions
         });
         sm.registerFunction("item.setlore", (sc, in) -> 
         {   
-            ItemStackUtils.setLore((ItemStack) in[0].get(sc), (List<String>) in[1].get(sc)); 
+            ItemStackUtils.setLore((ItemStack) in[0].get(sc), (List<Object>) in[1].get(sc)); 
             return Void.TYPE; 
         });
         sm.registerFunction("item.addlore", (sc, in) -> 
@@ -916,14 +914,22 @@ public class MinecraftFunctions
         { 
             Location l = (Location) in[0].get(sc);
             SignTileEntity sign = (SignTileEntity) l.getWorld().getTileEntity(l.getBlockPos());
-            SpecialBlockUtils.setSignLine(sign, in[1].getInt(sc), SnuviUtils.connect(sc, in, 2));
+            sign.signText[in[1].getInt(sc)] = new StringTextComponent(SnuviUtils.connect(sc, in, 2));
+
+            SUpdateTileEntityPacket packet = sign.getUpdatePacket();
+            World w = sign.getWorld();
+            if(w != null)
+            {
+                w.getPlayers().stream().filter(p -> p instanceof ServerPlayerEntity)
+                        .forEach(p -> ((ServerPlayerEntity) p).connection.sendPacket(packet));
+            }
             return Void.TYPE;
         });
         sm.registerFunction("block.getsign", (sc, in) -> 
         { 
             Location l = (Location) in[0].get(sc);
             SignTileEntity sign = (SignTileEntity) l.getWorld().getTileEntity(l.getBlockPos());
-            return sign.signText[in[1].getInt(sc)].getFormattedText();
+            return sign.signText[in[1].getInt(sc)].getString();
         });
         sm.registerFunction("block.setdoorstatus", (sc, in) -> 
         { 
@@ -1188,7 +1194,7 @@ public class MinecraftFunctions
             ent.setCustomNameVisible(false);  
             return Void.TYPE; 
         }); 
-        sm.registerFunction("entity.getname", (sc, in) -> ((Entity) in[0].get(sc)).getDisplayName().getFormattedText()); 
+        sm.registerFunction("entity.getname", (sc, in) -> ((Entity) in[0].get(sc)).getDisplayName().getString()); 
         sm.registerFunction("entity.throw", (sc, in) -> 
         { 
             Utils.setVelocity((Entity) in[0].get(sc), in[1].getDouble(sc), in[2].getDouble(sc), in[3].getDouble(sc)); 
@@ -1707,18 +1713,18 @@ public class MinecraftFunctions
         {  
             int id = in[1].getInt(sc);
             String message = SnuviUtils.connect(sc, in, 2);
-            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).addText(id, message));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ((ModEntityPlayerMP) p).getScoreboard().addText(id, message));
             return Void.TYPE; 
         });
         sm.registerFunction("sb.remove", (sc, in) -> 
         {  
             int id = in[1].getInt(sc);
-            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).removeText(id));
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ((ModEntityPlayerMP) p).getScoreboard().removeText(id));
             return Void.TYPE; 
         });
         sm.registerFunction("sb.reset", (sc, in) -> 
         {  
-            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ScoreboardUtils.get((ServerPlayerEntity) p).clear(server)); 
+            doForGroup(server, scripts, perms, in[0].get(sc), sc, p -> ((ModEntityPlayerMP) p).getScoreboard().clear((ModEntityPlayerMP) p)); 
             return Void.TYPE; 
         });
         
@@ -1921,17 +1927,7 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------  
         // Read-library   
         // ---------------------------------------------------------------------
-        sm.registerFunction("read.player", (sc, in) -> 
-        {
-            try
-            {
-                return Utils.getPlayerByName(server, in[0].getString(sc));
-            }
-            catch(PlayerNotFoundException ex)
-            {
-                return null;
-            }
-        });
+        sm.registerFunction("read.player", (sc, in) -> Utils.getPlayerByName(server, in[0].getString(sc)));
         sm.registerFunction("read.location", (sc, in) -> new Location(server, in[0].getString(sc)));
         sm.registerFunction("read.item", (sc, in) -> 
         {
@@ -1945,7 +1941,7 @@ public class MinecraftFunctions
             {
                 s = "minecraft:" + s;
             }
-            Item item = ItemStackUtils.getItem(s);
+            Item item = Mapper.getItem(s);
             int amount = in.length >= 2 ? in[1].getInt(sc) : 1;
             ItemStack stack = new ItemStack(item, amount);
             if(in.length >= 3)
@@ -2110,25 +2106,25 @@ public class MinecraftFunctions
         // ---------------------------------------------------------------------   
         sm.registerFunction("data.set", (sc, in) -> 
         {
-            pManager.setPlayerVar(getUUID(in[0].get(sc)), in[1].getString(sc), in[2].get(sc));
+            ((ModEntityPlayerMP) in[0].get(sc)).setVar(in[1].getString(sc), in[2].get(sc));
             return Void.TYPE;
         });
         sm.registerFunction("data.settimer", (sc, in) -> 
         {
-            pManager.setPlayerTimer(getUUID(in[0].get(sc)), in[1].getString(sc), in[2].getInt(sc));
+            ((ModEntityPlayerMP) in[0].get(sc)).setTimer(in[1].getString(sc), in[2].getInt(sc));
             return Void.TYPE;
         });
         sm.registerFunction("data.get", (sc, in) -> 
         {
-            return pManager.getPlayerVar(getUUID(in[0].get(sc)), in[1].getString(sc));
+            return ((ModEntityPlayerMP) in[0].get(sc)).getVar(in[1].getString(sc));
         });
         sm.registerFunction("data.gettimer", (sc, in) -> 
         {
-            return (double) pManager.getPlayerTimer(getUUID(in[0].get(sc)), in[1].getString(sc));
+            return (double) ((ModEntityPlayerMP) in[0].get(sc)).getTimer(in[1].getString(sc));
         });
         sm.registerFunction("data.clear", (sc, in) -> 
         {
-            pManager.clearPlayerData(getUUID(in[0].get(sc)));
+            ((ModEntityPlayerMP) in[0].get(sc)).clearData();
             return Void.TYPE;
         });
         
@@ -2182,16 +2178,9 @@ public class MinecraftFunctions
         });
     }
     
-    private static Class getClass(String s)
+    private static Class getClass(String s) throws ClassNotFoundException
     {
-        try
-        {
-            return Class.forName(s);
-        }
-        catch(ClassNotFoundException ex)
-        {
-            throw new IllegalStringException(s);
-        }
+        return Class.forName(s);
     }
     
     private static BlockState getBlockState(Location l)

+ 35 - 47
src/main/java/me/km/snuviscript/ScriptEvents.java

@@ -11,7 +11,8 @@ import me.hammerle.snuviscript.inputprovider.Variable;
 import me.km.utils.Utils;
 import me.km.entities.EntityHuman;
 import me.km.entities.EntityItemProjectile;
-import me.km.events.PlayerHurtEvent;
+import me.km.events.CommandEvent;
+import me.km.events.PlayerTabListNameEvent;
 import me.km.permissions.PermissionManager;
 import me.km.utils.Location;
 import net.minecraft.command.ICommandSource;
@@ -167,16 +168,19 @@ public class ScriptEvents
         handleEvent(e.getPlayer(), "player_post_respawn", sc -> {});
     }
     
-    //@SubscribeEvent
-    //public void onPlayerPreRespawn(PlayerPreRespawnEvent e)
-    //{
-    //    handleEvent(e.getPlayerEntity(), "player_pre_respawn", sc -> {});
-    //}
+    public void onPlayerPreRespawn(PlayerEntity p)
+    {
+        handleEvent(p, "player_pre_respawn", sc -> {});
+    }
     
     @SubscribeEvent
-    public void onPlayerDamage(PlayerHurtEvent e)
+    public void onPlayerDamage(LivingHurtEvent e)
     {        
-        PlayerEntity p = e.getPlayer();  
+        if(!(e.getEntityLiving() instanceof ServerPlayerEntity))
+        {
+            return;
+        }
+        PlayerEntity p = (PlayerEntity) e.getEntityLiving();  
         handleEvent(p, "player_hurt", (sc) -> 
         {
             sc.setVar("player_killed", p.getHealth() <= e.getAmount());   
@@ -475,23 +479,6 @@ public class ScriptEvents
         });
     }
     
-    /*@SubscribeEvent
-    public void onPlayerLogin(FML e)
-    {    
-        PlayerEntity p = e.player;
-        if(p == null)
-        {
-            return;
-        }
-        handleEvent(p, "player_login", (sc) -> 
-        {       
-            sc.setVar("first_join", Utils.hasPlayedBefore(p));
-            PlayerList list = KajetansMod.server.getPlayerList();
-            sc.setVar("is_banned", list.getBannedPlayers().isBanned(p.getGameProfile()));
-            sc.setVar("is_whitelisted", list.getWhitelistedPlayers().isWhitelisted(p.getGameProfile()));
-        });
-    }*/
-    
     @SubscribeEvent
     public void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent e)
     {    
@@ -750,22 +737,24 @@ public class ScriptEvents
         });
     }
     
-    //@SubscribeEvent
-    //public void onCommand(CommandEvent e)
-    //{
-    //    if(p instanceof PlayerEntity)
-    //    {
-    //        handleEvent((PlayerEntity) e.getSender(), "command", (sc) -> 
-    //        {
-    //            sc.setVar("command", e.getCommand().getName()); 
-    //            sc.setVar("args", Arrays.stream(e.getParameters()).map(s -> SnuviUtils.convert(s)).collect(Collectors.toList()));
-    //            sc.setVar("cancel", e.isCanceled()); 
-    //        }, (sc) -> 
-    //        {
-    //            simpleCancel(sc, e, "command");
-    //        });
-    //    }
-    //}
+    public void onCommand(CommandEvent e)
+    {
+        handleEvent(e.getPlayer(), "command", (sc) -> 
+        {
+            sc.setVar("command", e.getName()); 
+            sc.setVar("cancel", e.isCanceled()); 
+        }, (sc) -> 
+        {
+            try
+            {
+                ifVarNotNull(sc, "cancel", v -> e.setCanceled(v.getBoolean(sc)));
+            }
+            catch(Exception ex)
+            {
+                scripts.getLogger().print("invalid var in 'command' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+            }
+        });
+    }
     
     public void onCustomCommand(PlayerEntity p, String command, String[] args)
     {
@@ -812,24 +801,23 @@ public class ScriptEvents
         });
     }
     
-    /*@SubscribeEvent
     public void onGetPlayerName(PlayerTabListNameEvent e)
     {
-        handleEvent(e.getPlayerEntity(), "tab_list", (sc) -> 
+        handleEvent(e.getPlayer(), "tab_list", (sc) -> 
         {
-            sc.setVar("tab_name", e.getPlayerEntity().getName());
+            sc.setVar("tab_name", e.getName());
         }, (sc) -> 
         {
             try
             {
-                ifVarNotNull(sc, "tab_name", v -> e.setName(new StringTextComponent(v.getString(sc))));
+                ifVarNotNull(sc, "tab_name", v -> e.setName(v.getString(sc)));
             }
             catch(Exception ex)
             {
-                KajetansMod.scripts.logger.print("invalid var in 'tab_list' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
+                scripts.getLogger().print("invalid var in 'tab_list' event", ex, null, sc.getName(), sc, sc.getActiveSourceLine());
             }
         });
-    }*/
+    }
     
     @SubscribeEvent(priority = EventPriority.HIGHEST)
     public void BlockExplosionProtection(ExplosionEvent.Start e)

+ 60 - 45
src/main/java/me/km/utils/ItemStackUtils.java

@@ -1,21 +1,18 @@
 package me.km.utils;
 
+import com.mojang.brigadier.exceptions.CommandSyntaxException;
 import java.util.ArrayList;
 import java.util.List;
-import me.km.exception.IllegalItemStackStringException;
-import net.minecraft.block.Block;
 import net.minecraft.entity.ai.attributes.AttributeModifier;
 import net.minecraft.entity.ai.attributes.AttributeModifier.Operation;
-import net.minecraft.item.Items;
 import net.minecraft.inventory.EquipmentSlotType;
-import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
 import net.minecraft.nbt.JsonToNBT;
 import net.minecraft.nbt.CompoundNBT;
 import net.minecraft.nbt.ListNBT;
 import net.minecraft.nbt.StringNBT;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.world.World;
+import net.minecraft.util.text.ITextComponent;
+import net.minecraft.util.text.StringTextComponent;
 
 public class ItemStackUtils 
 {
@@ -169,28 +166,67 @@ public class ItemStackUtils
         return stack.write(new CompoundNBT()).toString();
     }
     
-    public static ItemStack getStackFromNbtString(String s) throws IllegalItemStackStringException
+    public static ItemStack getStackFromNbtString(String s) throws CommandSyntaxException
     {
-        try
-        {
-            CompoundNBT c = JsonToNBT.getTagFromJson(s);
-            return ItemStack.read(c);
-        }
-        catch(Exception ex)
-        {
-            throw new IllegalItemStackStringException(ex.getMessage());
-        }
+        CompoundNBT c = JsonToNBT.getTagFromJson(s);
+        return ItemStack.read(c);
     }
     
     // -----------------------------------------------------------------------------------
     // Misc
     // -----------------------------------------------------------------------------------
 
-    public static void setLore(ItemStack stack, List<String> list) 
+    /*public ITextComponent getDisplayName() {
+      CompoundNBT compoundnbt = this.getChildTag("display");
+      if (compoundnbt != null && compoundnbt.contains("Name", 8)) {
+         try {
+            ITextComponent itextcomponent = ITextComponent.Serializer.fromJson(compoundnbt.getString("Name"));
+            if (itextcomponent != null) {
+               return itextcomponent;
+            }
+
+            compoundnbt.remove("Name");
+         } catch (JsonParseException var3) {
+            compoundnbt.remove("Name");
+         }
+      }
+
+      return this.getItem().getDisplayName(this);
+   }
+
+   public ItemStack setDisplayName(@Nullable ITextComponent name) {
+      CompoundNBT compoundnbt = this.getOrCreateChildTag("display");
+      if (name != null) {
+         compoundnbt.putString("Name", ITextComponent.Serializer.toJson(name));
+      } else {
+         compoundnbt.remove("Name");
+      }
+
+      return this;
+   }
+   
+   if (compoundnbt.getTagId("Lore") == 9) {
+               ListNBT listnbt = compoundnbt.getList("Lore", 8);
+
+               for(int j = 0; j < listnbt.size(); ++j) {
+                  String s = listnbt.getString(j);
+
+                  try {
+                     ITextComponent itextcomponent1 = ITextComponent.Serializer.fromJson(s);
+                     if (itextcomponent1 != null) {
+                        list.add(TextComponentUtils.mergeStyles(itextcomponent1, (new Style()).setColor(TextFormatting.DARK_PURPLE).setItalic(true)));
+                     }
+                  } catch (JsonParseException var19) {
+                     compoundnbt.remove("Lore");
+                  }
+               }
+            }*/
+    
+    public static void setLore(ItemStack stack, List<Object> list) 
     {
         CompoundNBT com = stack.getOrCreateChildTag("display");
         ListNBT nbtList = new ListNBT();
-        list.forEach(s -> nbtList.add(new StringNBT(s)));
+        list.forEach(s -> nbtList.add(new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s.toString())))));
         com.put("Lore", nbtList);
     }
     
@@ -198,18 +234,18 @@ public class ItemStackUtils
     {
         CompoundNBT com = stack.getOrCreateChildTag("display");
         ListNBT nbtList = com.getList("Lore", 8);
-        nbtList.add(new StringNBT(s));
+        nbtList.add(new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
         com.put("Lore", nbtList);
     }
     
-    public static List<String> getLore(ItemStack stack)
+    public static List<Object> getLore(ItemStack stack)
     {
         CompoundNBT com = stack.getOrCreateChildTag("display");
         ListNBT nbtList = com.getList("Lore", 8);
-        ArrayList<String> list = new ArrayList<>();
+        ArrayList<Object> list = new ArrayList<>();
         for(int i = 0; i < nbtList.size(); i++)
         {
-            list.add(nbtList.getString(i));
+            list.add(ITextComponent.Serializer.fromJson(nbtList.getString(i)).getString());
         }
         return list;
     }    
@@ -220,33 +256,12 @@ public class ItemStackUtils
         ListNBT list = com.getList("Lore", 8);                  
         if(i >= list.size())
         {
-            list.add(new StringNBT(s));
+            list.add(new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
         }
         else
         {
-            list.set(i, new StringNBT(s));
+            list.set(i, new StringNBT(ITextComponent.Serializer.toJson(new StringTextComponent(s))));
         }           
         com.put("Lore", list);
     }
-    
-    public static void drop(World w, BlockPos pos, ItemStack stack)
-    {
-        Block.spawnAsEntity(w, pos, stack);
-    }
-    
-    public static Item getItem(String stack) throws IllegalItemStackStringException
-    {
-        /*Item item = Item.getByNameOrId(stack);
-        if(item == null)
-        {
-            Block b = Block.getBlockFromName(stack);
-            if(b == null)
-            {
-                throw new IllegalItemStackStringException(stack);
-            }
-            return Item.getItemFromBlock(b);
-        }
-        return item;*/
-        return Items.APPLE;
-    }
 }

+ 3 - 4
src/main/java/me/km/utils/Location.java

@@ -3,7 +3,6 @@ package me.km.utils;
 import java.util.Objects;
 import java.util.regex.PatternSyntaxException;
 import me.km.world.WorldManager;
-import me.km.exception.IllegalLocationStringException;
 import net.minecraft.block.BlockState;
 import net.minecraft.entity.Entity;
 import net.minecraft.server.MinecraftServer;
@@ -56,7 +55,7 @@ public class Location
         this(ent.world, ent.posX, ent.posY, ent.posZ, ent.rotationYaw, ent.rotationPitch);
     }
     
-    public Location(MinecraftServer server, String location) throws IllegalLocationStringException
+    public Location(MinecraftServer server, String location)
     {
         try
         {
@@ -81,11 +80,11 @@ public class Location
                 this.pitch = 0;
                 return;
             }
-            throw new IllegalLocationStringException(location);
+            throw new IllegalArgumentException(String.format("'%s' is not a valid location string", location));
         }
         catch(PatternSyntaxException | NumberFormatException ex)
         {
-            throw new IllegalLocationStringException(location);
+            throw new IllegalArgumentException(String.format("'%s' is not a valid location string", location));
         }
     }
 

+ 7 - 0
src/main/java/me/km/utils/Mapper.java

@@ -2,7 +2,9 @@ package me.km.utils;
 
 import net.minecraft.enchantment.Enchantment;
 import net.minecraft.enchantment.Enchantments;
+import net.minecraft.item.Item;
 import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
 import net.minecraft.particles.IParticleData;
 import net.minecraft.particles.ParticleTypes;
 import net.minecraft.potion.Effect;
@@ -49,4 +51,9 @@ public class Mapper
     {
         return ParticleTypes.ANGRY_VILLAGER;
     }
+    
+    public static Item getItem(String name)
+    {
+        return Items.APPLE;
+    }
 }

+ 0 - 7
src/main/java/me/km/utils/ReflectionUtils.java

@@ -218,13 +218,6 @@ public class ReflectionUtils
     // random field gets
     // -----------------------------------------------------------------------------------
     
-    private final static Field TIME_IN_GROUND = getField(AbstractArrowEntity.class, "field_184552_b"); // timeInGround
-    
-    public static int getArrowTimeInGround(AbstractArrowEntity arrow)
-    {
-        return getInt(arrow, TIME_IN_GROUND, 0);
-    }
-    
     private final static Field ENTITY_ITEM_AGE = getField(ItemEntity.class, "field_70292_b"); // age
     
     public static int getAge(ItemEntity item)

+ 0 - 34
src/main/java/me/km/utils/SpecialBlockUtils.java

@@ -1,34 +0,0 @@
-package me.km.utils;
-
-import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.network.play.server.SUpdateTileEntityPacket;
-import net.minecraft.tileentity.SignTileEntity;
-import net.minecraft.util.text.StringTextComponent;
-import net.minecraft.world.World;
-
-public class SpecialBlockUtils 
-{
-    public static void setSignLine(SignTileEntity sign, int line, String text, boolean update)
-    {
-        if(line < 0 || line > 3)
-        {
-            return;
-        }
-        sign.signText[line] = new StringTextComponent(text);
-        if(update)
-        {
-            SUpdateTileEntityPacket packet = sign.getUpdatePacket();
-            World w = sign.getWorld();
-            if(w != null)
-            {
-                w.getPlayers().stream().filter(p -> p instanceof ServerPlayerEntity)
-                        .forEach(p -> ((ServerPlayerEntity) p).connection.sendPacket(packet));
-            }
-        }
-    }
-    
-    public static void setSignLine(SignTileEntity sign, int line, String text)
-    {
-        setSignLine(sign, line, text, true);
-    }
-}

+ 0 - 39
src/main/java/me/km/utils/TitleUtils.java

@@ -1,39 +0,0 @@
-package me.km.utils;
-
-import net.minecraft.entity.player.ServerPlayerEntity;
-import net.minecraft.network.play.server.STitlePacket;
-import net.minecraft.util.text.StringTextComponent;
-
-public class TitleUtils 
-{
-    public static void setTitleTime(ServerPlayerEntity p, int fadeIn, int stay, int fadeOut)
-    {
-        p.connection.sendPacket(new STitlePacket(fadeIn, stay, fadeOut));
-    }
-    
-    public static void clearTitle(ServerPlayerEntity p)
-    {
-        p.connection.sendPacket(new STitlePacket(STitlePacket.Type.CLEAR, null));
-        p.connection.sendPacket(new STitlePacket(STitlePacket.Type.RESET, null));
-    }
-    
-    public static void resetTitle(ServerPlayerEntity p)
-    {
-        p.connection.sendPacket(new STitlePacket(STitlePacket.Type.RESET, null));
-    }
-    
-    private static void setTitle(STitlePacket.Type a, ServerPlayerEntity p, String s)
-    {
-        p.connection.sendPacket(new STitlePacket(a, new StringTextComponent(s)));
-    }
-    
-    public static void setTitle(ServerPlayerEntity p, String s)
-    {
-        setTitle(STitlePacket.Type.TITLE, p, s);
-    }
-    
-    public static void setSubTitle(ServerPlayerEntity p, String s)
-    {
-        setTitle(STitlePacket.Type.SUBTITLE, p, s);
-    }
-}

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

@@ -3,8 +3,6 @@ package me.km.utils;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
-import me.km.KajetansMod;
-import me.km.exception.PlayerNotFoundException;
 import me.km.permissions.PermissionManager;
 import net.minecraft.block.BlockState;
 import net.minecraft.entity.Entity;
@@ -357,12 +355,12 @@ public class Utils
         return getTargetBlock(ent, range, true, false);
     }
     
-    public static ServerPlayerEntity getPlayerByName(MinecraftServer server, String name) throws PlayerNotFoundException
+    public static ServerPlayerEntity getPlayerByName(MinecraftServer server, String name)
     {
         String nameLower = name.toLowerCase();
         return server.getPlayerList().getPlayers().stream()
                     .filter(pl -> pl.getName().getUnformattedComponentText().toLowerCase().contains(nameLower))
-                    .findFirst().orElseThrow(() -> new PlayerNotFoundException(name));
+                    .findFirst().orElse(null);
     }
 }
 

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

@@ -75,52 +75,52 @@
     "block.km.pear_sapling": "Pear Sapling", 
     "block.km.plum_sapling": "Plum Sapling", 
 
-    "item.km.wood_stick": "Wooden Stick", 
+    "item.km.wooden_stick": "Wooden Stick", 
     "item.km.stone_stick": "Stone Stick", 
     "item.km.copper_stick": "Copper Stick", 
     "item.km.bronze_stick": "Bronze Stick", 
     "item.km.iron_stick": "Iron Stick", 
-    "item.km.gold_stick": "Gold Stick", 
+    "item.km.golden_stick": "Golden Stick", 
     "item.km.diamond_stick": "Diamond Stick", 
 
-    "item.km.wood_scepter": "Wooden Scepter", 
+    "item.km.wooden_scepter": "Wooden Scepter", 
     "item.km.stone_scepter": "Stone Scepter", 
     "item.km.copper_scepter": "Copper Scepter", 
     "item.km.bronze_scepter": "Bronze Scepter", 
     "item.km.iron_scepter": "Iron Scepter", 
-    "item.km.gold_scepter": "Gold Scepter", 
+    "item.km.golden_scepter": "Golden Scepter", 
     "item.km.diamond_scepter": "Diamond Scepter", 
 
-    "item.km.wood_dagger": "Wooden Dagger", 
+    "item.km.wooden_dagger": "Wooden Dagger", 
     "item.km.stone_dagger": "Stone Dagger", 
     "item.km.copper_dagger": "Copper Dagger", 
     "item.km.bronze_dagger": "Bronze Dagger", 
     "item.km.iron_dagger": "Iron Dagger", 
-    "item.km.gold_dagger": "Gold Dagger", 
+    "item.km.golden_dagger": "Golden Dagger", 
     "item.km.diamond_dagger": "Diamond Dagger", 
 
-    "item.km.wood_hammer": "Wooden Hammer", 
+    "item.km.wooden_hammer": "Wooden Hammer", 
     "item.km.stone_hammer": "Stone Hammer", 
     "item.km.copper_hammer": "Copper Hammer", 
     "item.km.bronze_hammer": "Bronze Hammer", 
     "item.km.iron_hammer": "Iron Hammer", 
-    "item.km.gold_hammer": "Gold Hammer", 
+    "item.km.golden_hammer": "Golden Hammer", 
     "item.km.diamond_hammer": "Diamond Hammer", 
     
-    "item.km.wood_battleaxe": "Wooden Battleaxe", 
+    "item.km.wooden_battleaxe": "Wooden Battleaxe", 
     "item.km.stone_battleaxe": "Stone Battleaxe", 
     "item.km.copper_battleaxe": "Copper Battleaxe", 
     "item.km.bronze_battleaxe": "Bronze Battleaxe", 
     "item.km.iron_battleaxe": "Iron Battleaxe", 
-    "item.km.gold_battleaxe": "Gold Battleaxe", 
+    "item.km.golden_battleaxe": "Golden Battleaxe", 
     "item.km.diamond_battleaxe": "Diamond Battleaxe", 
 
-    "item.km.wood_key": "Wooden Key", 
+    "item.km.wooden_key": "Wooden Key", 
     "item.km.silver_key": "Silver Key", 
     "item.km.copper_key": "Copper Key", 
     "item.km.bronze_key": "Bronze Key", 
     "item.km.iron_key": "Iron Key", 
-    "item.km.gold_key": "Gold Key", 
+    "item.km.golden_key": "Golden Key", 
     "item.km.diamond_key": "Diamond Key", 
 
     "item.km.cylinder": "Cylinder Hat", 

+ 0 - 0
src/main/resources/assets/km/models/item/gold_battleaxe.json → src/main/resources/assets/km/models/item/golden_battleaxe.json


+ 0 - 0
src/main/resources/assets/km/models/item/gold_dagger.json → src/main/resources/assets/km/models/item/golden_dagger.json


+ 0 - 0
src/main/resources/assets/km/models/item/gold_hammer.json → src/main/resources/assets/km/models/item/golden_hammer.json


+ 0 - 0
src/main/resources/assets/km/models/item/gold_key.json → src/main/resources/assets/km/models/item/golden_key.json


+ 0 - 0
src/main/resources/assets/km/models/item/gold_scepter.json → src/main/resources/assets/km/models/item/golden_scepter.json


+ 0 - 0
src/main/resources/assets/km/models/item/gold_stick.json → src/main/resources/assets/km/models/item/golden_stick.json


+ 0 - 0
src/main/resources/assets/km/models/item/wood_battleaxe.json → src/main/resources/assets/km/models/item/wooden_battleaxe.json


+ 0 - 0
src/main/resources/assets/km/models/item/wood_dagger.json → src/main/resources/assets/km/models/item/wooden_dagger.json


+ 0 - 0
src/main/resources/assets/km/models/item/wood_hammer.json → src/main/resources/assets/km/models/item/wooden_hammer.json


+ 0 - 0
src/main/resources/assets/km/models/item/wood_scepter.json → src/main/resources/assets/km/models/item/wooden_scepter.json


+ 0 - 0
src/main/resources/assets/km/models/item/wood_stick.json → src/main/resources/assets/km/models/item/wooden_stick.json


+ 81 - 0
src/main/resources/data/km/loot_tables/entities/bear/blackbear.json

@@ -0,0 +1,81 @@
+{
+  "type": "minecraft:entity",
+  "pools": [
+    {
+      "name": "main",
+      "rolls": 1,
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "weight": 3,
+          "functions": [
+            {
+              "function": "minecraft:set_count",
+              "count": {
+                "min": 0.0,
+                "max": 2.0,
+                "type": "minecraft:uniform"
+              }
+            },
+            {
+              "function": "minecraft:looting_enchant",
+              "count": {
+                "min": 0.0,
+                "max": 1.0
+              }
+            }
+          ],
+          "name": "minecraft:cod"
+        },
+        {
+          "type": "minecraft:item",
+          "functions": [
+            {
+              "function": "minecraft:set_count",
+              "count": {
+                "min": 0.0,
+                "max": 2.0,
+                "type": "minecraft:uniform"
+              }
+            },
+            {
+              "function": "minecraft:looting_enchant",
+              "count": {
+                "min": 0.0,
+                "max": 1.0
+              }
+            }
+          ],
+          "name": "minecraft:salmon"
+        }
+      ]
+    },
+    {
+      "name": "fur",
+      "rolls": 1,
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "functions": [
+            {
+              "function": "minecraft:set_count",
+              "count": {
+                "min": 0.0,
+                "max": 2.0,
+                "type": "minecraft:uniform"
+              }
+            },
+            {
+              "function": "minecraft:looting_enchant",
+              "count": {
+                "min": 0.0,
+                "max": 1.0
+              }
+            }
+          ],
+          "name": "km:bear_black_fur"
+        }
+      ]
+    }
+  ]
+}

+ 81 - 0
src/main/resources/data/km/loot_tables/entities/bear/brownbear.json

@@ -0,0 +1,81 @@
+{
+  "type": "minecraft:entity",
+  "pools": [
+    {
+      "name": "main",
+      "rolls": 1,
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "weight": 3,
+          "functions": [
+            {
+              "function": "minecraft:set_count",
+              "count": {
+                "min": 0.0,
+                "max": 2.0,
+                "type": "minecraft:uniform"
+              }
+            },
+            {
+              "function": "minecraft:looting_enchant",
+              "count": {
+                "min": 0.0,
+                "max": 1.0
+              }
+            }
+          ],
+          "name": "minecraft:cod"
+        },
+        {
+          "type": "minecraft:item",
+          "functions": [
+            {
+              "function": "minecraft:set_count",
+              "count": {
+                "min": 0.0,
+                "max": 2.0,
+                "type": "minecraft:uniform"
+              }
+            },
+            {
+              "function": "minecraft:looting_enchant",
+              "count": {
+                "min": 0.0,
+                "max": 1.0
+              }
+            }
+          ],
+          "name": "minecraft:salmon"
+        }
+      ]
+    },
+    {
+      "name": "fur",
+      "rolls": 1,
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "functions": [
+            {
+              "function": "minecraft:set_count",
+              "count": {
+                "min": 0.0,
+                "max": 2.0,
+                "type": "minecraft:uniform"
+              }
+            },
+            {
+              "function": "minecraft:looting_enchant",
+              "count": {
+                "min": 0.0,
+                "max": 1.0
+              }
+            }
+          ],
+          "name": "km:bear_brown_fur"
+        }
+      ]
+    }
+  ]
+}

+ 15 - 0
src/main/resources/data/km/recipes/armor/bronze_boots.json

@@ -0,0 +1,15 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X X",
+    "X X"
+  ],
+  "key": {
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_boots"
+  }
+}

+ 16 - 0
src/main/resources/data/km/recipes/armor/bronze_chestplate.json

@@ -0,0 +1,16 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X X",
+    "XXX",
+    "XXX"
+  ],
+  "key": {
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_chestplate"
+  }
+}

+ 15 - 0
src/main/resources/data/km/recipes/armor/bronze_helmet.json

@@ -0,0 +1,15 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X X"
+  ],
+  "key": {
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_helmet"
+  }
+}

+ 16 - 0
src/main/resources/data/km/recipes/armor/bronze_leggings.json

@@ -0,0 +1,16 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X X",
+    "X X"
+  ],
+  "key": {
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_leggings"
+  }
+}

+ 15 - 0
src/main/resources/data/km/recipes/armor/copper_boots.json

@@ -0,0 +1,15 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X X",
+    "X X"
+  ],
+  "key": {
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_boots"
+  }
+}

+ 16 - 0
src/main/resources/data/km/recipes/armor/copper_chestplate.json

@@ -0,0 +1,16 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X X",
+    "XXX",
+    "XXX"
+  ],
+  "key": {
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_chestplate"
+  }
+}

+ 15 - 0
src/main/resources/data/km/recipes/armor/copper_helmet.json

@@ -0,0 +1,15 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X X"
+  ],
+  "key": {
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_helmet"
+  }
+}

+ 16 - 0
src/main/resources/data/km/recipes/armor/copper_leggings.json

@@ -0,0 +1,16 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X X",
+    "X X"
+  ],
+  "key": {
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_leggings"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/axe/bronze_axe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XX",
+    "X#",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_axe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/axe/copper_axe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XX",
+    "X#",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_axe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/bronze_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_battleaxe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/copper_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_battleaxe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/diamond_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:diamond"
+    }
+  },
+  "result": {
+    "item": "km:diamond_battleaxe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/golden_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:gold_ingot"
+    }
+  },
+  "result": {
+    "item": "km:golden_battleaxe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/iron_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:iron_ingot"
+    }
+  },
+  "result": {
+    "item": "km:iron_battleaxe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/stone_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:cobblestone"
+    }
+  },
+  "result": {
+    "item": "km:stone_battleaxe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/battleaxe/wooden_battleaxe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    " XX",
+    " #X",
+    "#  "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "tag": "minecraft:planks"
+    }
+  },
+  "result": {
+    "item": "km:wooden_battleaxe"
+  }
+}

+ 0 - 0
src/main/resources/data/km/recipes/crate_acacia.json → src/main/resources/data/km/recipes/crate/crate_acacia.json


+ 0 - 0
src/main/resources/data/km/recipes/crate_big_oak.json → src/main/resources/data/km/recipes/crate/crate_big_oak.json


+ 0 - 0
src/main/resources/data/km/recipes/crate_birch.json → src/main/resources/data/km/recipes/crate/crate_birch.json


+ 0 - 0
src/main/resources/data/km/recipes/crate_jungle.json → src/main/resources/data/km/recipes/crate/crate_jungle.json


+ 0 - 0
src/main/resources/data/km/recipes/crate_oak.json → src/main/resources/data/km/recipes/crate/crate_oak.json


+ 0 - 0
src/main/resources/data/km/recipes/crate_spruce.json → src/main/resources/data/km/recipes/crate/crate_spruce.json


+ 18 - 0
src/main/resources/data/km/recipes/dagger/bronze_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_dagger"
+  }
+}

+ 18 - 0
src/main/resources/data/km/recipes/dagger/copper_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_dagger"
+  }
+}

+ 18 - 0
src/main/resources/data/km/recipes/dagger/diamond_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:diamond"
+    }
+  },
+  "result": {
+    "item": "km:diamond_dagger"
+  }
+}

+ 18 - 0
src/main/resources/data/km/recipes/dagger/golden_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:gold_ingot"
+    }
+  },
+  "result": {
+    "item": "km:golden_dagger"
+  }
+}

+ 18 - 0
src/main/resources/data/km/recipes/dagger/iron_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:iron_ingot"
+    }
+  },
+  "result": {
+    "item": "km:iron_dagger"
+  }
+}

+ 18 - 0
src/main/resources/data/km/recipes/dagger/stone_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:cobblestone"
+    }
+  },
+  "result": {
+    "item": "km:stone_dagger"
+  }
+}

+ 18 - 0
src/main/resources/data/km/recipes/dagger/wooden_dagger.json

@@ -0,0 +1,18 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "X ",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "tag": "minecraft:planks"
+    }
+  },
+  "result": {
+    "item": "km:wooden_dagger"
+  }
+}

+ 9 - 0
src/main/resources/data/km/recipes/food/fried_egg.json

@@ -0,0 +1,9 @@
+{
+  "type": "minecraft:smelting",
+  "ingredient": {
+    "item": "minecraft:egg"
+  },
+  "result": "km:fried_egg",
+  "experience": 0.35,
+  "cookingtime": 200
+}

+ 9 - 0
src/main/resources/data/km/recipes/food/fried_egg_from_campfire_cooking.json

@@ -0,0 +1,9 @@
+{
+  "type": "minecraft:campfire_cooking",
+  "ingredient": {
+    "item": "minecraft:egg"
+  },
+  "result": "km:fried_egg",
+  "experience": 0.35,
+  "cookingtime": 600
+}

+ 9 - 0
src/main/resources/data/km/recipes/food/fried_egg_from_smoking.json

@@ -0,0 +1,9 @@
+{
+  "type": "minecraft:smoking",
+  "ingredient": {
+    "item": "minecraft:egg"
+  },
+  "result": "km:fried_egg",
+  "experience": 0.35,
+  "cookingtime": 100
+}

+ 9 - 0
src/main/resources/data/km/recipes/food/mushroom_stick_cooked.json

@@ -0,0 +1,9 @@
+{
+  "type": "minecraft:smelting",
+  "ingredient": {
+    "item": "km:mushroom_stick_raw"
+  },
+  "result": "km:mushroom_stick_cooked",
+  "experience": 0.35,
+  "cookingtime": 200
+}

+ 9 - 0
src/main/resources/data/km/recipes/food/mushroom_stick_cooked_from_campfire_cooking.json

@@ -0,0 +1,9 @@
+{
+  "type": "minecraft:campfire_cooking",
+  "ingredient": {
+    "item": "km:mushroom_stick_raw"
+  },
+  "result": "km:mushroom_stick_cooked",
+  "experience": 0.35,
+  "cookingtime": 600
+}

+ 9 - 0
src/main/resources/data/km/recipes/food/mushroom_stick_cooked_from_smoking.json

@@ -0,0 +1,9 @@
+{
+  "type": "minecraft:smoking",
+  "ingredient": {
+    "item": "km:mushroom_stick_raw"
+  },
+  "result": "km:mushroom_stick_cooked",
+  "experience": 0.35,
+  "cookingtime": 100
+}

+ 20 - 0
src/main/resources/data/km/recipes/food/mushroom_stick_raw.json

@@ -0,0 +1,20 @@
+{
+  "type": "minecraft:crafting_shapeless",
+  "ingredients": [
+    {
+      "item": "minecraft:brown_mushroom"
+    },
+    {
+      "item": "minecraft:brown_mushroom"
+    },
+    {
+      "item": "minecraft:red_mushroom"
+    },
+    {
+      "item": "minecraft:stick"
+    }
+  ],
+  "result": {
+    "item": "km:mushroom_stick_raw"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/bronze_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_hammer"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/copper_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_hammer"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/diamond_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:diamond"
+    }
+  },
+  "result": {
+    "item": "km:diamond_hammer"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/golden_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:gold_ingot"
+    }
+  },
+  "result": {
+    "item": "km:golden_hammer"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/iron_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:iron_ingot"
+    }
+  },
+  "result": {
+    "item": "km:iron_hammer"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/stone_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "minecraft:cobblestone"
+    }
+  },
+  "result": {
+    "item": "km:stone_hammer"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hammer/wooden_hammer.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XXX",
+    "X#X",
+    " # "
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "tag": "minecraft:planks"
+    }
+  },
+  "result": {
+    "item": "km:wooden_hammer"
+  }
+}

+ 17 - 0
src/main/resources/data/km/recipes/hay_bundle.json

@@ -0,0 +1,17 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "###",
+    "###",
+    "###"
+  ],
+  "key": {
+    "#": {
+      "tag": "km:grass"
+    }
+  },
+  "result": {
+    "item": "km:hay_bundle",
+    "count": 9
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hoe/bronze_hoe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XX",
+    " #",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:bronze_ingot"
+    }
+  },
+  "result": {
+    "item": "km:bronze_hoe"
+  }
+}

+ 19 - 0
src/main/resources/data/km/recipes/hoe/copper_hoe.json

@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+    "XX",
+    " #",
+    " #"
+  ],
+  "key": {
+    "#": {
+      "item": "minecraft:stick"
+    },
+    "X": {
+      "item": "km:copper_ingot"
+    }
+  },
+  "result": {
+    "item": "km:copper_hoe"
+  }
+}

+ 0 - 0
src/main/resources/data/km/recipes/bronze_ingot.json → src/main/resources/data/km/recipes/ingot/bronze_ingot.json


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott