diff --git a/src/projectzombie/Main.java b/src/projectzombie/Main.java index 7321c15..efcf400 100755 --- a/src/projectzombie/Main.java +++ b/src/projectzombie/Main.java @@ -14,9 +14,10 @@ import projectzombie.display.DisplayWindow; import projectzombie.entity.EntityEventHandler; import projectzombie.entity.player.EntityPlayer; import projectzombie.init.Entities; +import projectzombie.init.ItemModifiers; import projectzombie.init.Items; import projectzombie.init.LayerGenerators; -import projectzombie.init.Recipies; +import projectzombie.init.Recipes; import projectzombie.init.Resources; import projectzombie.init.Sounds; import projectzombie.init.Tasks; @@ -65,11 +66,12 @@ public class Main Cheats.init(args); Items.init(); + ItemModifiers.init(); Entities.init(); Tasks.init(); Tiles.init(); LayerGenerators.init(); - Recipies.init(); + Recipes.init(); // Create the display window = new DisplayWindow(); diff --git a/src/projectzombie/display/DisplayRenderUI.java b/src/projectzombie/display/DisplayRenderUI.java index df84e38..0a94ead 100755 --- a/src/projectzombie/display/DisplayRenderUI.java +++ b/src/projectzombie/display/DisplayRenderUI.java @@ -54,7 +54,7 @@ public class DisplayRenderUI continue; } - Model model_item = stack.item.getModel(stack.meta).getGuiModel(); + Model model_item = stack.item.getModel(stack).getGuiModel(); double item_offset = (Models.UI_ACTIVE_SLOT.getHeight() - model_item.getHeight()) / 2; Matrix4 matrix_item = Matrix4.multiply(matrix, Matrix4.translate(i * offset + item_offset, item_offset, 0)); diff --git a/src/projectzombie/entity/EntityBoss.java b/src/projectzombie/entity/EntityBoss.java index ca42ca7..45f0aa4 100755 --- a/src/projectzombie/entity/EntityBoss.java +++ b/src/projectzombie/entity/EntityBoss.java @@ -14,6 +14,7 @@ import projectzombie.display.bossbar.IBossBar; import projectzombie.init.Items; import projectzombie.init.Models; import projectzombie.init.Tiles; +import projectzombie.items.modifier.ItemModifierMeta; import projectzombie.model.Model; import projectzombie.time.GameTimer; import projectzombie.util.math.ItemStack; @@ -233,10 +234,11 @@ public class EntityBoss extends Entity implements IBossBar, EntityKillWithPartic // Spawn the loot layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack( - Items.HEALTH_POTION, RandomHelpers.randrange(rand, 20), (byte)50))); + Items.HEALTH_POTION, RandomHelpers.randrange(rand, 20), new ItemModifierMeta(50)))); layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack( - Items.AMMO, RandomHelpers.randrange(rand, 200), (byte)50))); - layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack(Items.GRAPPLING_HOOK, 1, (byte)2))); + Items.AMMO, RandomHelpers.randrange(rand, 200), new ItemModifierMeta(50)))); + layer.spawnEntity(new EntityItem(getPos(), getVelocity(), new ItemStack( + Items.GRAPPLING_HOOK, 1, new ItemModifierMeta(2)))); } @Override diff --git a/src/projectzombie/entity/EntityItem.java b/src/projectzombie/entity/EntityItem.java index fa1cff8..f07e53a 100755 --- a/src/projectzombie/entity/EntityItem.java +++ b/src/projectzombie/entity/EntityItem.java @@ -78,8 +78,7 @@ public class EntityItem extends EntityParticle EntityItem ei = (EntityItem) e; if( - ei.stack.meta == this.stack.meta && - ei.stack.item == this.stack.item && + ei.stack.stackEquals(this.stack) && ei.stack.count + this.stack.count <= this.stack.item.max && ei.age > this.age ) { @@ -121,7 +120,7 @@ public class EntityItem extends EntityParticle @Override public EntityParticlePart getParticleAt(int id) { - ModelItem model = stack.item.getModel(stack.meta); + ModelItem model = stack.item.getModel(stack); EntityParticlePart particle = new EntityParticlePart(model.tex, getPos().add(new Vec3d(0, 0.25, 0)), 0.5, 0b1000); particle.animationSize = model.animationSize; particle.animationSpeed = model.animationSpeed; diff --git a/src/projectzombie/entity/player/EntityPlayer.java b/src/projectzombie/entity/player/EntityPlayer.java index cbe4790..e7991cc 100755 --- a/src/projectzombie/entity/player/EntityPlayer.java +++ b/src/projectzombie/entity/player/EntityPlayer.java @@ -97,7 +97,7 @@ public class EntityPlayer extends Entity implements } public int getAmmo() { - return inventory.getItemCount(Items.AMMO); + return inventory.getItemCount(new ItemStack(Items.AMMO, 1)); } @Override @@ -385,7 +385,10 @@ public class EntityPlayer extends Entity implements if(!i.isEmpty()) { - EntityItem e = new EntityItem(getPos(), getVelocity(), new ItemStack(i.item, 1, i.meta), Math.toRadians(angle)); + ItemStack stack = i.copy(); + stack.count = 1; + + EntityItem e = new EntityItem(getPos(), getVelocity(), stack, Math.toRadians(angle)); Main.world.getLayer().spawnEntity(e); i.count -= 1; } diff --git a/src/projectzombie/init/ItemModifiers.java b/src/projectzombie/init/ItemModifiers.java new file mode 100644 index 0000000..86c1157 --- /dev/null +++ b/src/projectzombie/init/ItemModifiers.java @@ -0,0 +1,31 @@ +package projectzombie.init; + +import java.util.ArrayList; + +import bdf.types.BdfObject; +import projectzombie.items.modifier.ItemModifier; +import projectzombie.items.modifier.ItemModifierDamage; +import projectzombie.items.modifier.ItemModifierMeta; + +public class ItemModifiers +{ + public static final ArrayList> MODIFIERS = new ArrayList<>(); + + private static void register(Class m) + { + try { + m.getConstructor(BdfObject.class); + } catch (NoSuchMethodException | SecurityException err) { + err.printStackTrace(); + System.exit(1); + } + + MODIFIERS.add(m); + } + + public static void init() + { + register(ItemModifierMeta.class); + register(ItemModifierDamage.class); + } +} diff --git a/src/projectzombie/init/Recipies.java b/src/projectzombie/init/Recipes.java similarity index 72% rename from src/projectzombie/init/Recipies.java rename to src/projectzombie/init/Recipes.java index 12e9da4..a33729e 100644 --- a/src/projectzombie/init/Recipies.java +++ b/src/projectzombie/init/Recipes.java @@ -5,9 +5,10 @@ import java.util.ArrayList; import projectzombie.inventory.Crafting; import projectzombie.inventory.recipe.Recipe; import projectzombie.inventory.recipe.RecipeBasic; +import projectzombie.items.modifier.ItemModifierDamage; import projectzombie.util.math.ItemStack; -public class Recipies +public class Recipes { public static ArrayList recipies; @@ -39,19 +40,19 @@ public class Recipies recipies.add(new RecipeBasic( new ItemStack[] { - new ItemStack(Items.FLINT, 2, (short)0), - new ItemStack(Items.PLANT_FIBRE, 5, (short)0), + new ItemStack(Items.FLINT, 2), + new ItemStack(Items.PLANT_FIBRE, 5), }, new Crafting[] { Crafting.BASIC, - }, new ItemStack(Items.FLINT_HATCHET, 1, (short)0))); + }, new ItemStack(Items.FLINT_HATCHET, 1, new ItemModifierDamage(0, 10)))); recipies.add(new RecipeBasic( new ItemStack[] { - new ItemStack(Items.FLINT, 1, (short)0), - new ItemStack(Items.PLANT_FIBRE, 1, (short)0), + new ItemStack(Items.FLINT, 1), + new ItemStack(Items.PLANT_FIBRE, 1), }, new Crafting[] { Crafting.BASIC, - }, new ItemStack(Items.FLINT_HATCHET, 1, (short)0))); + }, new ItemStack(Items.FLINT_HATCHET, 1))); } diff --git a/src/projectzombie/inventory/IInventory.java b/src/projectzombie/inventory/IInventory.java index d7ad6e8..5559a43 100755 --- a/src/projectzombie/inventory/IInventory.java +++ b/src/projectzombie/inventory/IInventory.java @@ -1,6 +1,5 @@ package projectzombie.inventory; -import projectzombie.items.Item; import projectzombie.util.math.ItemStack; public interface IInventory @@ -13,5 +12,4 @@ public interface IInventory public ItemStack removeItem(int slot); public void removeItem(ItemStack stack); - public void removeItem(Item item, int count); } diff --git a/src/projectzombie/inventory/Inventory.java b/src/projectzombie/inventory/Inventory.java index 127b82a..9691880 100755 --- a/src/projectzombie/inventory/Inventory.java +++ b/src/projectzombie/inventory/Inventory.java @@ -5,6 +5,7 @@ import bdf.types.BdfArray; import bdf.types.BdfNamedList; import bdf.types.BdfObject; import projectzombie.items.Item; +import projectzombie.items.modifier.ItemModifier; import projectzombie.util.math.ItemStack; public class Inventory implements IInventory, IBdfClassManager @@ -47,7 +48,7 @@ public class Inventory implements IInventory, IBdfClassManager int count = 0; for(ItemStack check : items) { - if(item.stackEquals(check) && !check.isEmpty()) { + if(check.stackAbstractEquals(item) && !check.isEmpty()) { count += check.count; } } @@ -55,19 +56,6 @@ public class Inventory implements IInventory, IBdfClassManager return count; } - public int getItemCount(Item item) - { - int count = 0; - - for(ItemStack check : items) { - if(item == check.item && !check.isEmpty()) { - count += 1; - } - } - - return count; - } - public void addItem(ItemStack stack) { if(stack.isEmpty()) { @@ -93,10 +81,17 @@ public class Inventory implements IInventory, IBdfClassManager for(ItemStack check : items) { - if(check.isEmpty()) { + if(check.isEmpty()) + { + ItemModifier[] modifiers = new ItemModifier[stack.modifiers.length]; + + for(int i=0;i tc = ItemModifiers.MODIFIERS.get(i); + if(tc == this.getClass()) { + return i; + } + } + return -1; + } + + public static ItemModifier loadModifier(BdfObject bdf) + { + try + { + // Load the task id + BdfNamedList nl = bdf.getNamedList(); + int id = nl.get("id").getInteger(); + + // Send back null if the id is out of range + if(id < 0 || id >= ItemModifiers.MODIFIERS.size()) { + System.out.println("Invalid modifier ID found: " + id); + return null; + } + + // Get the class and the constructor + Class tcl = ItemModifiers.MODIFIERS.get(id); + Constructor tcon = tcl.getConstructor(BdfObject.class); + + // Send back the new entity + return tcon.newInstance(bdf); + } + + catch( + NoSuchMethodException | + SecurityException | + InstantiationException | + IllegalAccessException | + IllegalArgumentException | + InvocationTargetException e) + { + e.printStackTrace(); + + // Send null if there was an issue + return null; + } + } +} diff --git a/src/projectzombie/items/modifier/ItemModifierDamage.java b/src/projectzombie/items/modifier/ItemModifierDamage.java new file mode 100644 index 0000000..bd34ca6 --- /dev/null +++ b/src/projectzombie/items/modifier/ItemModifierDamage.java @@ -0,0 +1,67 @@ +package projectzombie.items.modifier; + +import bdf.types.BdfNamedList; +import bdf.types.BdfObject; + +public class ItemModifierDamage extends ItemModifier +{ + private int damage; + private int max; + + public ItemModifierDamage(int damage, int max) { + this.damage = damage; + this.max = max; + } + + public ItemModifierDamage(BdfObject bdf) { + BdfClassLoad(bdf); + } + + public void repair() { + damage = 0; + } + + public void repair(int amount) { + damage -= amount; + if(damage < 0) { + damage = 0; + } + } + + public void damage(int amount) { + damage += amount; + if(damage > max) { + damage = max; + } + } + + public boolean isBroken() { + return damage == max; + } + + @Override + public void BdfClassLoad(BdfObject bdf) { + BdfNamedList nl = bdf.getNamedList(); + damage = nl.get("damage").getInteger(); + max = nl.get("max").getInteger(); + } + + @Override + public void BdfClassSave(BdfObject bdf) { + BdfNamedList nl = bdf.getNamedList(); + nl.set("damage", bdf.newObject().setInteger(damage)); + nl.set("max", bdf.newObject().setInteger(max)); + } + + @Override + public boolean isEqual(ItemModifier other) { + return ((other instanceof ItemModifierDamage) && + ((ItemModifierDamage)other).damage == damage && + ((ItemModifierDamage)other).max == max); + } + + @Override + public ItemModifierDamage copy() { + return new ItemModifierDamage(damage, max); + } +} diff --git a/src/projectzombie/items/modifier/ItemModifierMeta.java b/src/projectzombie/items/modifier/ItemModifierMeta.java new file mode 100644 index 0000000..bb02e83 --- /dev/null +++ b/src/projectzombie/items/modifier/ItemModifierMeta.java @@ -0,0 +1,52 @@ +package projectzombie.items.modifier; + +import bdf.types.BdfNamedList; +import bdf.types.BdfObject; +import projectzombie.util.math.ItemStack; + +public class ItemModifierMeta extends ItemModifier +{ + private int meta; + + public ItemModifierMeta(int meta) { + this.meta = meta; + } + + public ItemModifierMeta(BdfObject bdf) { + BdfClassLoad(bdf); + } + + public static int getStackMeta(ItemStack stack) + { + ItemModifier modifier = stack.getModifier(ItemModifierMeta.class); + + if(modifier != null && modifier instanceof ItemModifierMeta) { + return ((ItemModifierMeta)modifier).meta; + } + + return 0; + } + + @Override + public void BdfClassLoad(BdfObject bdf) { + BdfNamedList nl = bdf.getNamedList(); + meta = nl.get("meta").getInteger(); + } + + @Override + public void BdfClassSave(BdfObject bdf) { + BdfNamedList nl = bdf.getNamedList(); + nl.set("meta", bdf.newObject().setInteger(meta)); + } + + @Override + public boolean isEqual(ItemModifier other) { + return (other instanceof ItemModifierMeta) && ((ItemModifierMeta)other).meta == meta; + } + + @Override + public ItemModifier copy() { + return new ItemModifierMeta(meta); + } + +} diff --git a/src/projectzombie/items/spawner/ItemSpawnDummy.java b/src/projectzombie/items/spawner/ItemSpawnDummy.java index d19b28e..ae3401b 100644 --- a/src/projectzombie/items/spawner/ItemSpawnDummy.java +++ b/src/projectzombie/items/spawner/ItemSpawnDummy.java @@ -5,6 +5,7 @@ import projectzombie.entity.EntityDummy; import projectzombie.init.Models; import projectzombie.items.ItemSpawn; import projectzombie.model.ModelItem; +import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,7 +13,7 @@ public class ItemSpawnDummy extends ItemSpawn { @Override - public ModelItem getModel(short meta) { + public ModelItem getModel(ItemStack stack) { return Models.ITEM_SPAWN_DUMMY; } diff --git a/src/projectzombie/items/spawner/ItemSpawnZombie.java b/src/projectzombie/items/spawner/ItemSpawnZombie.java index 9f08018..10d58bb 100755 --- a/src/projectzombie/items/spawner/ItemSpawnZombie.java +++ b/src/projectzombie/items/spawner/ItemSpawnZombie.java @@ -5,6 +5,7 @@ import projectzombie.entity.EntityZombie; import projectzombie.init.Models; import projectzombie.items.ItemSpawn; import projectzombie.model.ModelItem; +import projectzombie.util.math.ItemStack; import projectzombie.world.chunk.Chunk; import projectzombie.world.layer.Layer; @@ -12,7 +13,7 @@ public class ItemSpawnZombie extends ItemSpawn { @Override - public ModelItem getModel(short meta) { + public ModelItem getModel(ItemStack stack) { return Models.ITEM_SPAWN_ZOMBIE; } diff --git a/src/projectzombie/menu/MenuInventoryBasic.java b/src/projectzombie/menu/MenuInventoryBasic.java index 183ea91..90beddf 100644 --- a/src/projectzombie/menu/MenuInventoryBasic.java +++ b/src/projectzombie/menu/MenuInventoryBasic.java @@ -5,7 +5,7 @@ import gl_engine.vec.Vec2d; import projectzombie.Main; import projectzombie.init.Items; import projectzombie.init.Models; -import projectzombie.init.Recipies; +import projectzombie.init.Recipes; import projectzombie.inventory.Crafting; import projectzombie.inventory.Inventory; import projectzombie.inventory.recipe.Recipe; @@ -23,7 +23,7 @@ public class MenuInventoryBasic extends MenuInventory public MenuInventoryBasic(Menu parent, Crafting tool) { super(parent); - Recipe[] recipies = Recipies.getCraftableRecipies(tool); + Recipe[] recipies = Recipes.getCraftableRecipies(tool); inventory = Main.player.getInventory(); slider = new GUIContainerSlider(new Vec2d( diff --git a/src/projectzombie/menu/gui/GUIItemHolder.java b/src/projectzombie/menu/gui/GUIItemHolder.java index 813fa1e..ce8a4ad 100644 --- a/src/projectzombie/menu/gui/GUIItemHolder.java +++ b/src/projectzombie/menu/gui/GUIItemHolder.java @@ -30,7 +30,7 @@ public class GUIItemHolder implements GUIComponent { Matrix4 holding_matrix = Matrix4.multiply(matrix, Matrix4.translate(-0.425, -0.425, 0)); - Model model = holding.item.getModel(holding.meta).getGuiModel(); + Model model = holding.item.getModel(holding).getGuiModel(); model.setModel(holding_matrix); model.render(); @@ -44,24 +44,24 @@ public class GUIItemHolder implements GUIComponent } } - if(hover != null || !holding.isEmpty()) + if(hover != null && holding.isEmpty()) { - ItemStack stack; - - if(!holding.isEmpty()) { - stack = holding; - } else { - stack = hover.getItemStack(); - } + ItemStack stack = hover.getItemStack(); if(!stack.isEmpty()) { - String name = stack.item.getName(stack.meta); + String name = stack.item.getName(stack); Matrix4 container_matrix = matrix; + double distance = 0.5; + double offset = -0.6 - distance; + + if(Matrix4.multiply(matrix, new Vec3d(0, offset - 0.8, 0)).y < -10) { + offset = 0.2 + distance; + } container_matrix = Matrix4.multiply(container_matrix, Matrix4.translate( - -0.4 * name.length() / 2, -1, 0)); + -0.4 * name.length() / 2, offset, 0)); Matrix4 text_matrix = container_matrix; @@ -97,7 +97,7 @@ public class GUIItemHolder implements GUIComponent } holding.count += hover.count; - holding.meta = hover.meta; + holding.modifiers = hover.copyModifiers(); holding.item = hover.item; hover.count = 0; @@ -118,7 +118,7 @@ public class GUIItemHolder implements GUIComponent layer.spawnEntity(new EntityItem( Main.player.getPos(), Main.player.getVelocity(), - new ItemStack(holding.item, 1, holding.meta), + new ItemStack(holding.item, 1, holding.copyModifiers()), Math.toRadians(Main.player.angle))); holding.count -= 1; @@ -138,7 +138,7 @@ public class GUIItemHolder implements GUIComponent if(holding.isEmpty()) { holding.item = hover.item; - holding.meta = hover.meta; + holding.modifiers = hover.copyModifiers(); holding.count = (int)Math.ceil(hover.count / 2.0); hover.count = (int)Math.floor(hover.count / 2.0); @@ -166,7 +166,7 @@ public class GUIItemHolder implements GUIComponent stack_to.count -= 1; stack_from.item = stack_to.item; - stack_from.meta = stack_to.meta; + stack_from.modifiers = stack_to.copyModifiers(); this.hover.setItemStack(hover); this.hover.getter.onRemoveItemStack(); @@ -235,11 +235,11 @@ public class GUIItemHolder implements GUIComponent holding.count = hover.count; holding.item = hover.item; - holding.meta = hover.meta; + holding.modifiers = hover.copyModifiers(); hover.count = stack.count; hover.item = stack.item; - hover.meta = stack.meta; + hover.modifiers = stack.copyModifiers(); this.hover.setItemStack(hover); this.hover.getter.onRemoveItemStack(); diff --git a/src/projectzombie/menu/gui/GUIItemSlot.java b/src/projectzombie/menu/gui/GUIItemSlot.java index 4dff3f1..7e51049 100644 --- a/src/projectzombie/menu/gui/GUIItemSlot.java +++ b/src/projectzombie/menu/gui/GUIItemSlot.java @@ -51,9 +51,10 @@ public class GUIItemSlot implements GUIComponent public void render(Matrix4 matrix, Vec2d mousePos, boolean canHover) { ItemStack stack = getter.getItemStack(); + boolean hover = checkMouseHover(mousePos) && canHover; matrix = Matrix4.multiply(Matrix4.translate(pos.x, pos.y, 0), matrix); - Model model = stack.item.getModel(stack.meta).getGuiModel(); + Model model = stack.item.getModel(stack).getGuiModel(); if(stack.isEmpty()) { model = model_empty; @@ -65,7 +66,7 @@ public class GUIItemSlot implements GUIComponent model.render(); } - if(!getter.isReadOnly() && checkMouseHover(mousePos) && canHover) + if(!getter.isReadOnly() && hover) { double offset = (0.85 - hitboxSize) / 2; Matrix4 hover_matrix = Matrix4.multiply(matrix, Matrix4.translate(offset, offset, 0)); diff --git a/src/projectzombie/tiles/TileChest.java b/src/projectzombie/tiles/TileChest.java index 9b1df53..0c3e673 100755 --- a/src/projectzombie/tiles/TileChest.java +++ b/src/projectzombie/tiles/TileChest.java @@ -9,6 +9,7 @@ import projectzombie.entity.Entity; import projectzombie.entity.EntityItem; import projectzombie.init.Items; import projectzombie.init.Models; +import projectzombie.items.modifier.ItemModifierMeta; import projectzombie.model.Model; import projectzombie.util.math.ItemStack; import projectzombie.util.math.TileState; @@ -42,38 +43,38 @@ public class TileChest extends Tile implements TileBulletBreakable if(state.meta == CHEST_CAVES) { // Ammo - spawnItem(chunk, tpos, new ItemStack(Items.AMMO, RandomHelpers.randrange(rand, 100), (short)1)); + spawnItem(chunk, tpos, new ItemStack(Items.AMMO, RandomHelpers.randrange(rand, 100), new ItemModifierMeta(1))); // Tnt - spawnItem(chunk, tpos, new ItemStack(Items.TNT, RandomHelpers.randrange(rand, 2), (short)10)); + spawnItem(chunk, tpos, new ItemStack(Items.TNT, RandomHelpers.randrange(rand, 2), new ItemModifierMeta(10))); // Flare - spawnItem(chunk, tpos, new ItemStack(Items.FLARE, RandomHelpers.randrange(rand, 5), (byte)0)); + spawnItem(chunk, tpos, new ItemStack(Items.FLARE, RandomHelpers.randrange(rand, 5))); // Lantern - spawnItem(chunk, tpos, new ItemStack(Items.LANTERN, RandomHelpers.randrange(rand, 5), (byte)0)); + spawnItem(chunk, tpos, new ItemStack(Items.LANTERN, RandomHelpers.randrange(rand, 5))); // Health potions - spawnItem(chunk, tpos, new ItemStack(Items.HEALTH_POTION, RandomHelpers.randrange(rand, 4), (short)50)); + spawnItem(chunk, tpos, new ItemStack(Items.HEALTH_POTION, RandomHelpers.randrange(rand, 4), new ItemModifierMeta(50))); } if(state.meta == CHEST_LAVA_CAVES) { // Ammo - spawnItem(chunk, tpos, new ItemStack(Items.AMMO, RandomHelpers.randrange(rand, 250), (short)1)); + spawnItem(chunk, tpos, new ItemStack(Items.AMMO, RandomHelpers.randrange(rand, 250), new ItemModifierMeta(1))); // Tnt - spawnItem(chunk, tpos, new ItemStack(Items.TNT, RandomHelpers.randrange(rand, 2), (short)10)); + spawnItem(chunk, tpos, new ItemStack(Items.TNT, RandomHelpers.randrange(rand, 2), new ItemModifierMeta(10))); // Health potions - spawnItem(chunk, tpos, new ItemStack(Items.HEALTH_POTION, RandomHelpers.randrange(rand, 4), (short)50)); + spawnItem(chunk, tpos, new ItemStack(Items.HEALTH_POTION, RandomHelpers.randrange(rand, 4), new ItemModifierMeta(50))); // Flare - spawnItem(chunk, tpos, new ItemStack(Items.FLARE, RandomHelpers.randrange(rand, 5), (byte)0)); + spawnItem(chunk, tpos, new ItemStack(Items.FLARE, RandomHelpers.randrange(rand, 5))); // Lantern - spawnItem(chunk, tpos, new ItemStack(Items.LANTERN, RandomHelpers.randrange(rand, 5), (byte)0)); + spawnItem(chunk, tpos, new ItemStack(Items.LANTERN, RandomHelpers.randrange(rand, 5))); } diff --git a/src/projectzombie/tiles/TileHemp.java b/src/projectzombie/tiles/TileHemp.java index 2406080..de17354 100644 --- a/src/projectzombie/tiles/TileHemp.java +++ b/src/projectzombie/tiles/TileHemp.java @@ -51,10 +51,10 @@ public class TileHemp extends Tile int fibre = (int)(Math.random() * (state.meta - 3) * 2) + (state.meta - 3) * 2; layer.spawnEntity(new EntityItem(tpos.toDouble().xny(), new Vec3d(0, 0, 0), new ItemStack( - Items.HEMP_SEED, seeds, (short)0))); + Items.HEMP_SEED, seeds))); layer.spawnEntity(new EntityItem(tpos.toDouble().xny(), new Vec3d(0, 0, 0), new ItemStack( - Items.PLANT_FIBRE, fibre, (short)0))); + Items.PLANT_FIBRE, fibre))); layer.setFrontTile(new TileState(Tiles.HEMP, (byte)3), tpos); } diff --git a/src/projectzombie/tiles/TileLantern.java b/src/projectzombie/tiles/TileLantern.java index fef08c2..224bd1f 100755 --- a/src/projectzombie/tiles/TileLantern.java +++ b/src/projectzombie/tiles/TileLantern.java @@ -31,7 +31,7 @@ public class TileLantern extends Tile layer.setFrontTile(Tiles.VOID.getDefaultState(), tpos); layer.spawnEntity(new EntityItem(tpos.toDouble().xny(), new Vec3d(0, 0, 0), - new ItemStack(Items.LANTERN, 1, (byte)0))); + new ItemStack(Items.LANTERN, 1))); } @Override diff --git a/src/projectzombie/tiles/TileRock.java b/src/projectzombie/tiles/TileRock.java index df60277..f6e6f9b 100755 --- a/src/projectzombie/tiles/TileRock.java +++ b/src/projectzombie/tiles/TileRock.java @@ -3,6 +3,7 @@ package projectzombie.tiles; import projectzombie.init.Items; import projectzombie.init.Models; import projectzombie.items.ItemTool; +import projectzombie.items.modifier.ItemModifierMeta; import projectzombie.model.Model; import projectzombie.util.math.ItemStack; import projectzombie.util.math.TileState; @@ -36,8 +37,8 @@ public class TileRock extends Tile implements TileBulletBreakable @Override public ItemStack[] getTileDrops(TileState state) { return new ItemStack[] { - new ItemStack(Items.ROCK, 1, state.meta), - new ItemStack(Items.FLINT, state.meta == 0 && Math.random() > 0.8 ? 1 : 0, (short)0), + new ItemStack(Items.ROCK, 1, new ItemModifierMeta(state.meta)), + new ItemStack(Items.FLINT, state.meta == 0 && Math.random() > 0.8 ? 1 : 0), }; } diff --git a/src/projectzombie/tiles/TileTallGrass.java b/src/projectzombie/tiles/TileTallGrass.java index 1fe2964..8fb37ff 100644 --- a/src/projectzombie/tiles/TileTallGrass.java +++ b/src/projectzombie/tiles/TileTallGrass.java @@ -26,7 +26,7 @@ public class TileTallGrass extends Tile @Override public ItemStack[] getTileDrops(TileState state) { return new ItemStack[] { - new ItemStack(Items.PLANT_FIBRE, Math.random() > 0.9 ? 1 : 0, (short)0), + new ItemStack(Items.PLANT_FIBRE, Math.random() > 0.9 ? 1 : 0), }; } diff --git a/src/projectzombie/tiles/TileTree.java b/src/projectzombie/tiles/TileTree.java index a9dffbc..3769a12 100755 --- a/src/projectzombie/tiles/TileTree.java +++ b/src/projectzombie/tiles/TileTree.java @@ -3,6 +3,7 @@ package projectzombie.tiles; import projectzombie.init.Items; import projectzombie.init.Models; import projectzombie.items.ItemTool; +import projectzombie.items.modifier.ItemModifierMeta; import projectzombie.model.Model; import projectzombie.util.math.ItemStack; import projectzombie.util.math.TileState; @@ -31,8 +32,8 @@ public class TileTree extends Tile implements TileBulletBreakable public ItemStack[] getTileDrops(TileState state) { return new ItemStack[] { - new ItemStack(Items.ACORN, (int)(Math.random() * 3) + 1, (short)0), - new ItemStack(Items.LOG, (int)(Math.random() * 4) + 2, (short)state.meta), + new ItemStack(Items.ACORN, (int)(Math.random() * 3) + 1), + new ItemStack(Items.LOG, (int)(Math.random() * 4) + 2, new ItemModifierMeta(state.meta)), }; } diff --git a/src/projectzombie/util/math/ItemStack.java b/src/projectzombie/util/math/ItemStack.java index 1756b22..88b38e6 100755 --- a/src/projectzombie/util/math/ItemStack.java +++ b/src/projectzombie/util/math/ItemStack.java @@ -1,25 +1,51 @@ package projectzombie.util.math; import bdf.classes.IBdfClassManager; +import bdf.types.BdfArray; import bdf.types.BdfNamedList; import bdf.types.BdfObject; import projectzombie.init.Items; import projectzombie.items.Item; +import projectzombie.items.modifier.ItemModifier; public class ItemStack implements IBdfClassManager { - public short meta; + public ItemModifier[] modifiers; public Item item; public int count; - public ItemStack(Item item, int count, short meta) { + public ItemStack(Item item, int count, ItemModifier ... modifiers) { this.item = item; this.count = count; - this.meta = meta; + this.modifiers = modifiers; } public ItemStack copy() { - return new ItemStack(item, count, meta); + return new ItemStack(item, count, copyModifiers()); + } + + public ItemModifier[] copyModifiers() + { + ItemModifier[] modifiers = new ItemModifier[this.modifiers.length]; + + for(int i=0;i modifier) { + return getModifier(modifier) != null; + } + + public ItemModifier getModifier(Class modifier) + { + for(int i=0;i