remove slot magic value for npcs

This commit is contained in:
Sen 2025-08-01 03:30:06 +02:00
parent acc43e2d42
commit e1fc81962a
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
59 changed files with 776 additions and 825 deletions

View file

@ -40,7 +40,7 @@ public class AIFireballAttack extends EntityAIBase
public void resetTask()
{
this.parentEntity.setItemNoUpdate(0, null);
this.parentEntity.setItemNoUpdate(null);
}
public void updateTask()
@ -56,13 +56,13 @@ public class AIFireballAttack extends EntityAIBase
if (this.attackTimer == this.delay)
{
world.playEffect(1007, new BlockPos(this.parentEntity), 0);
this.parentEntity.setItemNoUpdate(0, new ItemStack(Items.orb));
this.parentEntity.setItemNoUpdate(new ItemStack(Items.orb));
}
if (this.attackTimer == this.delay * 2)
{
this.parentEntity.swingItem();
this.parentEntity.setItemNoUpdate(0, null);
this.parentEntity.setItemNoUpdate(null);
double d1 = 1.0D;
Vec3 vec3 = this.parentEntity.getLook(1.0F);
double d2 = target.posX - (this.parentEntity.posX + vec3.xCoord * d1);
@ -91,6 +91,6 @@ public class AIFireballAttack extends EntityAIBase
--this.attackTimer;
}
this.parentEntity.setItemNoUpdate(0, this.attackTimer > this.delay ? new ItemStack(Items.orb) : null);
this.parentEntity.setItemNoUpdate(this.attackTimer > this.delay ? new ItemStack(Items.orb) : null);
}
}

View file

@ -85,7 +85,7 @@ public class EntityAITakePlace extends EntityAIBase
this.entity.swingItem();
world.setState(blockpos, state, 3);
if(stack.decrSize())
this.entity.setItemNoUpdate(0, null);
this.entity.setItemNoUpdate(null);
}
}
else {
@ -102,7 +102,7 @@ public class EntityAITakePlace extends EntityAIBase
if(this.entity.getHeldItem() != null)
this.entity.getHeldItem().incrSize();
else
this.entity.setItemNoUpdate(0, new ItemStack(STEALABLE.get(state)));
this.entity.setItemNoUpdate(new ItemStack(STEALABLE.get(state)));
}
}
}

View file

@ -100,7 +100,7 @@ public class EntityAITempt extends EntityAIBase
{
if(this.temptItem == null)
return this.temptedEntity.getDistanceSqToEntity(this.temptingPlayer) >= this.distance;
ItemStack itemstack = this.temptingPlayer.getCurrentEquippedItem();
ItemStack itemstack = this.temptingPlayer.getHeldItem();
return itemstack == null ? false : this.temptItem.test(itemstack);
}
}

View file

@ -1,38 +0,0 @@
package common.attributes;
public enum UsageSlot {
HAND(0), HEAD(4, 0), BODY(3, 1), LEGS(2, 2), FEET(1, 3), INVENTORY(-1);
private static final UsageSlot[] LOOKUP = new UsageSlot[UsageSlot.values().length];
private final int index;
private final int armor;
static {
for(UsageSlot slot : values()) {
if(slot.index >= 0)
LOOKUP[slot.index] = slot;
}
}
private UsageSlot(int index, int armor) {
this.index = index;
this.armor = armor;
}
private UsageSlot(int index) {
this(index, -1);
}
public int getIndex() {
return this.index;
}
public int getArmorSlot() {
return this.armor;
}
public static UsageSlot getByIndex(int index) {
return index < 0 || index >= LOOKUP.length ? null : LOOKUP[index];
}
}

View file

@ -14,7 +14,6 @@ import java.util.Map.Entry;
import java.util.function.Function;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.block.artificial.BlockSlab;
import common.block.natural.BlockSnow;
import common.collect.ImmutableList;
@ -46,7 +45,7 @@ import common.util.BlockPos;
import common.util.BoundingBox;
import common.util.Clientside;
import common.util.Facing;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.HitPosition;
import common.util.Vec3;
import common.util.HitPosition.ObjectType;
@ -195,7 +194,7 @@ public class Block {
private String display;
private CheatTab tab;
private SoundType sound;
private HarvestTool miningTool;
private Equipment miningTool;
private Item item;
private static <T> Iterable<List<T>> cartesianProduct(Iterable<? extends Iterable<? extends T>> sets) {
@ -425,17 +424,21 @@ public class Block {
return this;
}
public final Block setMiningTool(HarvestTool tool, int level) {
public final Block setMiningTool(Equipment tool, int level) {
if(tool.isArmor())
throw new IllegalArgumentException("Typ " + tool + " darf keine Rüstung sein");
if(!tool.isLevelled())
throw new IllegalArgumentException("Abbauwerkzeug " + tool.getDisplay() + " muss Levels besitzen");
throw new IllegalArgumentException("Abbauwerkzeug " + tool + " muss Levels besitzen");
this.miningTool = tool;
this.miningLevel = level;
return this;
}
public final Block setMiningTool(HarvestTool tool) {
public final Block setMiningTool(Equipment tool) {
if(tool.isArmor())
throw new IllegalArgumentException("Typ " + tool + " darf keine Rüstung sein");
if(tool.isLevelled())
throw new IllegalArgumentException("Abbauwerkzeug " + tool.getDisplay() + " darf keine Levels besitzen");
throw new IllegalArgumentException("Abbauwerkzeug " + tool + " darf keine Levels besitzen");
this.miningTool = tool;
this.miningLevel = -1;
return this;
@ -579,7 +582,7 @@ public class Block {
return this.miningLevel;
}
public final HarvestTool getMiningTool() {
public final Equipment getMiningTool() {
return this.miningTool;
}
@ -1022,7 +1025,7 @@ public class Block {
return null;
}
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot) {
public void getModifiers(Map<Attribute, Float> map) {
}
@Clientside

View file

@ -1,6 +1,6 @@
package common.block;
import common.util.HarvestTool;
import common.util.Equipment;
public enum Material {
NONE {{
@ -10,13 +10,13 @@ public enum Material {
;
}},
WOOD {{
this.setBurning().setTool(HarvestTool.AXE);
this.setBurning().setTool(Equipment.AXE);
}},
SOLID {{
this.setRequiredTool(HarvestTool.PICKAXE);
this.setRequiredTool(Equipment.PICKAXE);
}},
DIGGABLE {{ // can harvest with shovel
this.setRequiredTool(HarvestTool.SHOVEL);
this.setRequiredTool(Equipment.SHOVEL);
}},
TRANSLUCENT {{
this.setTranslucent();
@ -25,16 +25,16 @@ public enum Material {
this.setBurning();
}},
SOFT {{ // can break faster with sword, can't connect to fences+walls
this.setNoPushMobility().setTool(HarvestTool.AXE);
this.setNoPushMobility().setTool(Equipment.AXE);
}},
PISTON {{
this.setImmovableMobility();
}},
HEAVY {{
this.setRequiredTool(HarvestTool.PICKAXE).setImmovableMobility();
this.setRequiredTool(Equipment.PICKAXE).setImmovableMobility();
}},
PLANT {{ // can break faster with sword
this.setNonSolid().setNoPushMobility().setTool(HarvestTool.AXE);
this.setNonSolid().setNoPushMobility().setTool(Equipment.AXE);
}},
SMALL {{ // can be placed more easily
this.setNonSolid().setNoPushMobility();
@ -64,19 +64,19 @@ public enum Material {
this.setLiquid(true).setReplaceable().setNoPushMobility();
}},
LEAVES {{ // can break faster with sword, precipitation block, special treatment in some worldgen
this.setBurning().setTranslucent().setNoPushMobility().setTool(HarvestTool.SHEARS);
this.setBurning().setTranslucent().setNoPushMobility().setTool(Equipment.SHEARS);
}},
BUSH {{ // can break faster with sword, can be replaced by small tree leaves
this.setNonSolid().setBurning().setNoPushMobility().setReplaceable().setTool(HarvestTool.AXE);
this.setNonSolid().setBurning().setNoPushMobility().setReplaceable().setTool(Equipment.AXE);
}},
FIRE {{
this.setNonSolid().setReplaceable().setNoPushMobility();
}},
POWDER {{ // can harvest with shovel, precipitation block
this.setNonSolid().setReplaceable().setRequiredTool(HarvestTool.SHOVEL).setNoPushMobility();
this.setNonSolid().setReplaceable().setRequiredTool(Equipment.SHOVEL).setNoPushMobility();
}},
FLUFF {{ // can harvest with shears
this.setPassable().setRequiredTool(HarvestTool.SWORD).setNoPushMobility();
this.setPassable().setRequiredTool(Equipment.SWORD).setNoPushMobility();
}};
private boolean solid = true;
@ -91,7 +91,7 @@ public enum Material {
private boolean requiresTool;
// 0 - normal; 1 - can't push other blocks; 2 - can't be pushed
private int mobility;
private HarvestTool tool;
private Equipment tool;
protected Material setTranslucent() {
this.opaque = false;
@ -124,13 +124,13 @@ public enum Material {
return this;
}
protected Material setRequiredTool(HarvestTool tool) {
protected Material setRequiredTool(Equipment tool) {
this.requiresTool = true;
this.tool = tool;
return this;
}
protected Material setTool(HarvestTool tool) {
protected Material setTool(Equipment tool) {
this.tool = tool;
return this;
}
@ -199,7 +199,7 @@ public enum Material {
return this.mobility;
}
public HarvestTool getTool() {
public Equipment getTool() {
return this.tool;
}
}

View file

@ -4,7 +4,6 @@ import java.util.List;
import java.util.Map;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.block.Block;
import common.block.Material;
import common.block.SoundType;
@ -42,9 +41,9 @@ public class BlockMetalBlock extends Block {
tooltip.add(this.metal.formatRarity());
}
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot)
public void getModifiers(Map<Attribute, Float> map)
{
if((slot == null || slot == UsageSlot.INVENTORY) && this.metal.radioactivity > 0.0f)
if(this.metal.radioactivity > 0.0f)
map.put(Attribute.RADIATION, this.metal.radioactivity * 4.0f * 9.0f);
}
}

View file

@ -15,7 +15,7 @@ import common.model.GuiPosition;
import common.rng.Random;
import common.tileentity.TileEntity;
import common.util.BlockPos;
import common.util.HarvestTool;
import common.util.Equipment;
import common.world.State;
import common.world.World;
@ -63,7 +63,7 @@ public class BlockDeadBush extends BlockBush
public void postBroken(World worldIn, EntityNPC player, BlockPos pos, State state, TileEntity te)
{
if (!worldIn.client && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS)
if (!worldIn.client && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS)
{
// player.triggerAchievement(StatRegistry.mineBlockStatArray[BlockRegistry.getIdFromBlock(this)]);
dropItem(worldIn, pos, new ItemStack(Items.deadbush));

View file

@ -19,7 +19,7 @@ import common.properties.PropertyEnum;
import common.rng.Random;
import common.tileentity.TileEntity;
import common.util.BlockPos;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.Identifyable;
import common.util.Facing.Axis;
import common.vars.Vars;
@ -170,7 +170,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable
public void postBroken(World worldIn, EntityNPC player, BlockPos pos, State state, TileEntity te)
{
if (worldIn.client || player.getCurrentEquippedItem() == null || !(player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS) || state.getValue(HALF) != BlockDoublePlant.EnumBlockHalf.LOWER || !this.onHarvest(worldIn, pos, state, player))
if (worldIn.client || player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS) || state.getValue(HALF) != BlockDoublePlant.EnumBlockHalf.LOWER || !this.onHarvest(worldIn, pos, state, player))
{
super.postBroken(worldIn, player, pos, state, te);
}
@ -192,7 +192,7 @@ public class BlockDoublePlant extends BlockBush implements IGrowable
}
else if (!worldIn.client)
{
if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS)
if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS)
{
this.onHarvest(worldIn, pos, iblockstate, player);
worldIn.setBlockToAir(pos.down());

View file

@ -21,7 +21,7 @@ import common.rng.Random;
import common.tileentity.TileEntity;
import common.util.BlockPos;
import common.util.Facing;
import common.util.HarvestTool;
import common.util.Equipment;
import common.vars.Vars;
import common.world.State;
import common.world.World;
@ -280,7 +280,7 @@ public class BlockLeaves extends BlockLeavesBase
}
public void postBroken(World worldIn, EntityNPC player, BlockPos pos, State state, TileEntity te) {
if(!worldIn.client && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS) {
if(!worldIn.client && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS) {
dropItem(worldIn, pos, new ItemStack(this.getItem()));
}
else {

View file

@ -14,7 +14,7 @@ import common.model.GuiPosition;
import common.rng.Random;
import common.tileentity.TileEntity;
import common.util.BlockPos;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.Identifyable;
import common.vars.Vars;
import common.world.State;
@ -92,7 +92,7 @@ public class BlockTallGrass extends BlockBush implements IGrowable
public void postBroken(World worldIn, EntityNPC player, BlockPos pos, State state, TileEntity te)
{
if (!worldIn.client && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS)
if (!worldIn.client && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS)
{
dropItem(worldIn, pos, new ItemStack(this.getItem()));
}

View file

@ -21,7 +21,7 @@ import common.util.BlockPos;
import common.util.BoundingBox;
import common.util.Clientside;
import common.util.Facing;
import common.util.HarvestTool;
import common.util.Equipment;
import common.vars.Vars;
import common.world.IWorldAccess;
import common.world.State;
@ -404,7 +404,7 @@ public class BlockVine extends Block
public void postBroken(World worldIn, EntityNPC player, BlockPos pos, State state, TileEntity te)
{
if (!worldIn.client && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS)
if (!worldIn.client && player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS)
{
// player.triggerAchievement(StatRegistry.mineBlockStatArray[BlockRegistry.getIdFromBlock(this)]);
dropItem(worldIn, pos, new ItemStack(this.getItem()));

View file

@ -4,7 +4,6 @@ import java.util.List;
import java.util.Map;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.block.SoundType;
import common.entity.npc.EntityNPC;
import common.init.MetalType;
@ -37,9 +36,9 @@ public class BlockMetalOre extends BlockOre {
tooltip.add(this.metal.formatRarity());
}
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot)
public void getModifiers(Map<Attribute, Float> map)
{
if((slot == null || slot == UsageSlot.INVENTORY) && this.metal.radioactivity > 0.0f)
if(this.metal.radioactivity > 0.0f)
map.put(Attribute.RADIATION, this.metal.radioactivity * 4.0f * 2.0f);
}
}

View file

@ -88,9 +88,9 @@ public class BlockTNT extends Block
public boolean onUse(World worldIn, BlockPos pos, State state, EntityNPC playerIn, Facing side, float hitX, float hitY, float hitZ)
{
if (playerIn.getCurrentEquippedItem() != null)
if (playerIn.getHeldItem() != null)
{
Item item = playerIn.getCurrentEquippedItem().getItem();
Item item = playerIn.getHeldItem().getItem();
if (item == Items.lighter || item == Items.fireball)
{
@ -99,11 +99,11 @@ public class BlockTNT extends Block
if (item == Items.lighter)
{
playerIn.getCurrentEquippedItem().damage(1, playerIn);
playerIn.getHeldItem().damage(1, playerIn);
}
else // if (!playerIn.creative)
{
playerIn.getCurrentEquippedItem().decrSize();
playerIn.getHeldItem().decrSize();
}
return true;

View file

@ -27,15 +27,15 @@ public class BlockToggleableLight extends Block {
public boolean onUse(World worldIn, BlockPos pos, State state, EntityNPC player, Facing side, float hitX, float hitY, float hitZ) {
if(!this.isOn) {
if(player.getCurrentEquippedItem() == null)
if(player.getHeldItem() == null)
return super.onUse(worldIn, pos, state, player, side, hitX, hitY, hitZ);
Item item = player.getCurrentEquippedItem().getItem();
Item item = player.getHeldItem().getItem();
if(item != Items.lighter && item != Items.fireball)
return super.onUse(worldIn, pos, state, player, side, hitX, hitY, hitZ);
if(item == Items.lighter)
player.getCurrentEquippedItem().damage(1, player);
player.getHeldItem().damage(1, player);
else
player.getCurrentEquippedItem().decrSize();
player.getHeldItem().decrSize();
}
this.toggle(worldIn, pos);
worldIn.playEffect(player, this.isOn ? 1004 : 1007, pos, 0);

View file

@ -20,7 +20,7 @@ import common.util.BlockPos;
import common.util.BoundingBox;
import common.util.Clientside;
import common.util.Facing;
import common.util.HarvestTool;
import common.util.Equipment;
import common.world.IBlockAccess;
import common.world.IWorldAccess;
import common.world.State;
@ -128,7 +128,7 @@ public class BlockTripWire extends Block
{
if (!worldIn.client)
{
if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS)
if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS)
{
worldIn.setState(pos, state.withProperty(DISARMED, Boolean.valueOf(true)), 4);
}

View file

@ -28,18 +28,18 @@ public class BlockUnlitTorch extends BlockTorch {
}
public boolean onUse(World worldIn, BlockPos pos, State state, EntityNPC playerIn, Facing side, float hitX, float hitY, float hitZ) {
if(playerIn.getCurrentEquippedItem() != null) {
Item item = playerIn.getCurrentEquippedItem().getItem();
if(playerIn.getHeldItem() != null) {
Item item = playerIn.getHeldItem().getItem();
if(item == Items.lighter || item == Items.fireball) {
worldIn.setState(pos, this.lit.getState().withProperty(FACING, state.getValue(FACING)).withProperty(BlockLitTorch.FUEL, 7), 3);
worldIn.playEffect(playerIn, 1007, pos, 0);
if(item == Items.lighter) {
playerIn.getCurrentEquippedItem().damage(1, playerIn);
playerIn.getHeldItem().damage(1, playerIn);
}
else {
playerIn.getCurrentEquippedItem().decrSize();
playerIn.getHeldItem().decrSize();
}
return true;

View file

@ -4,6 +4,7 @@ import java.util.Map;
import common.collect.Maps;
import common.entity.DamageSource;
import common.entity.Entity;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.item.ItemStack;
import common.item.material.ItemArmor;
@ -11,7 +12,7 @@ import common.item.tool.ItemTool;
import common.rng.Random;
import common.util.Displayable;
import common.util.ExtMath;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.Identifyable;
import common.vars.Vars;
@ -186,7 +187,7 @@ public enum Enchantment implements Displayable, Identifyable
public void onUserHurt(EntityLiving user, Entity attacker, int level)
{
Random random = user.getRNG();
ItemStack itemstack = EnchantmentHelper.getEnchantedItem(Enchantment.THORNS, user);
ItemStack itemstack = EnchantmentHelper.getEnchantedArmor(Enchantment.THORNS, user);
if ((user.worldObj.client || Vars.damageThorns) && isThornsHurting(level, random))
{
@ -230,7 +231,7 @@ public enum Enchantment implements Displayable, Identifyable
public boolean canApply(ItemStack stack)
{
return (stack.getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.AXE) || super.canApply(stack);
return (stack.getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.AXE) || super.canApply(stack);
}
// /**
@ -487,7 +488,7 @@ public enum Enchantment implements Displayable, Identifyable
}
public boolean canApply(ItemStack stack) {
return (stack.getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.AXE) || super.canApply(stack);
return (stack.getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.AXE) || super.canApply(stack);
}
public void onEntityDamaged(EntityLiving user, Entity target, int level) {
@ -617,7 +618,7 @@ public enum Enchantment implements Displayable, Identifyable
public static int getFireTimeForEntity(Entity entity, int duration)
{
int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.FIRE_PROTECTION, entity.getInventory());
int i = entity instanceof EntityNPC npc ? EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.FIRE_PROTECTION, npc.getArmor()) : 0;
if (i > 0)
{
@ -629,7 +630,7 @@ public enum Enchantment implements Displayable, Identifyable
public static double getKnockbackFactor(Entity entity, double strength)
{
int i = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.BLAST_PROTECTION, entity.getInventory());
int i = entity instanceof EntityNPC npc ? EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.BLAST_PROTECTION, npc.getArmor()) : 0;
if (i > 0)
{

View file

@ -10,6 +10,7 @@ import common.collect.Lists;
import common.collect.Maps;
import common.entity.DamageSource;
import common.entity.Entity;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.init.Items;
import common.item.Item;
@ -171,12 +172,12 @@ public class EnchantmentHelper
if (user != null)
{
applyEnchantmentModifierArray(ENCHANTMENT_ITERATOR_HURT, user.getInventory());
applyEnchantmentModifierArray(ENCHANTMENT_ITERATOR_HURT, user instanceof EntityNPC npc ? npc.getArmor() : new ItemStack[0]);
}
if (user != null && attacker != null) // && attacker.isPlayer())
{
applyEnchantmentModifier(ENCHANTMENT_ITERATOR_HURT, user.getHeldItem());
applyEnchantmentModifier(ENCHANTMENT_ITERATOR_HURT, user instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
}
@ -187,12 +188,12 @@ public class EnchantmentHelper
if (user != null)
{
applyEnchantmentModifierArray(ENCHANTMENT_ITERATOR_DAMAGE, user.getInventory());
applyEnchantmentModifierArray(ENCHANTMENT_ITERATOR_DAMAGE, user instanceof EntityNPC npc ? npc.getArmor() : new ItemStack[0]);
}
if (user != null) // && user.isPlayer())
{
applyEnchantmentModifier(ENCHANTMENT_ITERATOR_DAMAGE, user.getHeldItem());
applyEnchantmentModifier(ENCHANTMENT_ITERATOR_DAMAGE, user instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
}
@ -201,7 +202,7 @@ public class EnchantmentHelper
*/
public static int getKnockbackModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.KNOCKBACK, player.getHeldItem());
return getEnchantmentLevel(Enchantment.KNOCKBACK, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
/**
@ -209,7 +210,7 @@ public class EnchantmentHelper
*/
public static int getFireAspectModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.FIRE_ASPECT, player.getHeldItem());
return getEnchantmentLevel(Enchantment.FIRE_ASPECT, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
// /**
@ -233,7 +234,7 @@ public class EnchantmentHelper
*/
public static int getEfficiencyModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.EFFICIENCY, player.getHeldItem());
return getEnchantmentLevel(Enchantment.EFFICIENCY, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
/**
@ -241,7 +242,7 @@ public class EnchantmentHelper
*/
public static boolean getSilkTouchModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.SILK_TOUCH, player.getHeldItem()) > 0;
return getEnchantmentLevel(Enchantment.SILK_TOUCH, player instanceof EntityNPC npc ? npc.getHeldItem() : null) > 0;
}
/**
@ -249,7 +250,7 @@ public class EnchantmentHelper
*/
public static int getFortuneModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.FORTUNE, player.getHeldItem());
return getEnchantmentLevel(Enchantment.FORTUNE, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
/**
@ -257,7 +258,7 @@ public class EnchantmentHelper
*/
public static int getLuckOfSeaModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.LUCK_OF_THE_SEA, player.getHeldItem());
return getEnchantmentLevel(Enchantment.LUCK_OF_THE_SEA, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
/**
@ -265,7 +266,7 @@ public class EnchantmentHelper
*/
public static int getLureModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.LURE, player.getHeldItem());
return getEnchantmentLevel(Enchantment.LURE, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
/**
@ -273,7 +274,7 @@ public class EnchantmentHelper
*/
public static int getLootingModifier(EntityLiving player)
{
return getEnchantmentLevel(Enchantment.LOOTING, player.getHeldItem());
return getEnchantmentLevel(Enchantment.LOOTING, player instanceof EntityNPC npc ? npc.getHeldItem() : null);
}
// /**
@ -284,15 +285,17 @@ public class EnchantmentHelper
// return getMaxEnchantmentLevel(Enchantment.aquaAffinity.effectId, player.getInventory()) > 0;
// }
public static ItemStack getEnchantedItem(Enchantment p_92099_0_, EntityLiving p_92099_1_)
public static ItemStack getEnchantedArmor(Enchantment ench, EntityLiving entity)
{
for (ItemStack itemstack : p_92099_1_.getInventory())
{
if (itemstack != null && getEnchantmentLevel(p_92099_0_, itemstack) > 0)
{
return itemstack;
}
}
if(entity instanceof EntityNPC npc) {
for (ItemStack itemstack : npc.getArmor())
{
if (itemstack != null && getEnchantmentLevel(ench, itemstack) > 0)
{
return itemstack;
}
}
}
return null;
}

View file

@ -1,6 +1,5 @@
package common.enchantment;
import common.attributes.UsageSlot;
import common.item.Item;
import common.item.material.ItemArmor;
import common.item.tool.ItemFishingRod;
@ -31,17 +30,9 @@ public enum EnchantmentType
{
return true;
}
else if (item instanceof ItemArmor)
else if (item instanceof ItemArmor armor)
{
if (this == ARMOR)
{
return true;
}
else
{
ItemArmor armor = (ItemArmor)item;
return armor.armorType == UsageSlot.HEAD ? this == ARMOR_HEAD : (armor.armorType == UsageSlot.LEGS ? this == ARMOR_LEGS : (armor.armorType == UsageSlot.BODY ? this == ARMOR_TORSO : (armor.armorType == UsageSlot.FEET ? this == ARMOR_FEET : false)));
}
return this == ARMOR || armor.getArmorType().getEnchantmentType() == this;
}
else if(item instanceof ItemTool tool) {
return this == DIGGER || (tool.getToolType().isMelee() && this == WEAPON);

View file

@ -1956,21 +1956,6 @@ public abstract class Entity
{
}
/**
* returns the inventory of this entity (only used in EntityNPCMP it seems)
*/
public ItemStack[] getInventory()
{
return null;
}
/**
* Sets the held item, or an armor slot. Slot 0 is held item. Slot 1-4 is armor. Params: Item, slot
*/
public void setItem(int slot, ItemStack stack)
{
}
/**
* Returns true if the entity is on fire. Used by render to add the fire effect on rendering.
*/

View file

@ -1,5 +1,6 @@
package common.entity;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.item.ItemStack;
import common.util.Color;
@ -52,7 +53,7 @@ public class EntityDamageSource extends DamageSource
*/
public String getDeathMessage(EntityLiving victim)
{
ItemStack item = this.damageSourceEntity instanceof EntityLiving ? ((EntityLiving)this.damageSourceEntity).getHeldItem() : null;
ItemStack item = this.damageSourceEntity instanceof EntityNPC ? ((EntityNPC)this.damageSourceEntity).getHeldItem() : null;
// String s = "death.attack." + this.damageType;
// String s1 = s + "Item";
return item != null ? String.format(this.displayExtra, victim.getColoredName(this.color), this.damageSourceEntity.getColoredName(this.color), item.getColoredName(this.color)) : String.format(this.display, victim.getColoredName(this.color), this.damageSourceEntity.getColoredName(this.color));

View file

@ -1,5 +1,6 @@
package common.entity;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.item.ItemStack;
import common.util.Color;
@ -37,7 +38,7 @@ public class EntityDamageSourceIndirect extends EntityDamageSource
public String getDeathMessage(EntityLiving victim)
{
String killer = this.indirectEntity == null ? this.damageSourceEntity.getColoredName(this.color) : this.indirectEntity.getColoredName(this.color);
ItemStack item = this.indirectEntity instanceof EntityLiving ? ((EntityLiving)this.indirectEntity).getHeldItem() : null;
ItemStack item = this.indirectEntity instanceof EntityNPC ? ((EntityNPC)this.indirectEntity).getHeldItem() : null;
// String s = "death.attack." + this.damageType;
// String s1 = s + "Item";
return item != null ? String.format(this.displayExtra, victim.getColoredName(this.color), killer, item.getColoredName(this.color)) : String.format(this.display, victim.getColoredName(this.color), killer);

View file

@ -27,6 +27,7 @@ import common.packet.SPacketSpawnObject;
import common.packet.SPacketSpawnPlayer;
import common.tags.TagObject;
import common.util.ExtMath;
import common.util.Equipment;
public class EntityTrackerEntry {
public final Entity trackedEntity;
@ -308,13 +309,19 @@ public class EntityTrackerEntry {
new SPacketEntityAttach(1, this.trackedEntity, ((EntityLiving)this.trackedEntity).getLeashedTo()));
}
if(this.trackedEntity instanceof EntityLiving) {
for(int i = 0; i < 5; ++i) {
ItemStack itemstack = ((EntityLiving)this.trackedEntity).getItem(i);
if(this.trackedEntity instanceof EntityNPC) {
ItemStack itemstack1 = ((EntityNPC)this.trackedEntity).getHeldItem();
if(itemstack1 != null) {
playerMP.connection
.sendPacket(new SPacketEntityEquipment(this.trackedEntity.getId(), 0, itemstack1));
}
for(Equipment slot : Equipment.ARMOR) {
ItemStack itemstack = ((EntityNPC)this.trackedEntity).getArmor(slot);
if(itemstack != null) {
playerMP.connection
.sendPacket(new SPacketEntityEquipment(this.trackedEntity.getId(), i, itemstack));
.sendPacket(new SPacketEntityEquipment(this.trackedEntity.getId(), slot.getIndex() + 1, itemstack));
}
}
}

View file

@ -27,7 +27,7 @@ import common.inventory.IInvBasic;
import common.inventory.InventoryBasic;
import common.item.Item;
import common.item.ItemStack;
import common.item.material.ItemHorseArmor;
import common.item.material.ItemAnimalArmor;
import common.item.spawner.ItemMobTemplate;
import common.pathfinding.PathNavigateGround;
import common.tags.TagObject;
@ -263,10 +263,10 @@ public class EntityHorse extends EntityAnimal implements IInvBasic {
return this.getHorseWatchableBoolean(8);
}
public ItemHorseArmor getHorseArmorItem()
public ItemAnimalArmor getHorseArmorItem()
{
Item item = ItemRegistry.byId(this.dataWatcher.getWatchableObjectInt(22));
return item instanceof ItemHorseArmor armor ? armor : null;
return item instanceof ItemAnimalArmor armor ? armor : null;
}
public boolean isEatingHaystack()
@ -292,7 +292,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic {
@Serverside
public void setHorseArmorStack(ItemStack itemStackIn)
{
this.dataWatcher.updateObject(22, itemStackIn != null && itemStackIn.getItem() instanceof ItemHorseArmor armor ? ItemRegistry.getId(armor) : 0);
this.dataWatcher.updateObject(22, itemStackIn != null && itemStackIn.getItem() instanceof ItemAnimalArmor armor ? ItemRegistry.getId(armor) : 0);
}
public void setBreeding(boolean breeding)
@ -346,7 +346,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic {
*/
public int getTotalArmorValue()
{
ItemHorseArmor armor = this.getHorseArmorItem();
ItemAnimalArmor armor = this.getHorseArmorItem();
return armor != null ? armor.getArmorValue() : 0;
}
@ -711,7 +711,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic {
this.texturePrefix = this.texturePrefix + "_" + i + "_";
}
ItemHorseArmor i1 = this.getHorseArmorItem();
ItemAnimalArmor i1 = this.getHorseArmorItem();
// if (i1 >= horseArmorTextures.length)
// {
@ -788,7 +788,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic {
if (this.canWearArmor())
{
if (itemstack.getItem() instanceof ItemHorseArmor)
if (itemstack.getItem() instanceof ItemAnimalArmor)
{
if (!this.isTame())
{
@ -1718,7 +1718,7 @@ public class EntityHorse extends EntityAnimal implements IInvBasic {
*/
public static boolean isArmorItem(Item p_146085_0_)
{
return p_146085_0_ instanceof ItemHorseArmor;
return p_146085_0_ instanceof ItemAnimalArmor;
}
/**

View file

@ -29,7 +29,7 @@ import common.rng.Random;
import common.tags.TagObject;
import common.util.Clientside;
import common.util.ExtMath;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.Color;
import common.world.World;
@ -176,7 +176,7 @@ public class EntitySheep extends EntityAnimal
{
ItemStack itemstack = player.inventory.getCurrentItem();
if (itemstack != null && itemstack.getItem() instanceof ItemTool tool && tool.getToolType() == HarvestTool.SHEARS && !this.getSheared() && !this.isChild())
if (itemstack != null && itemstack.getItem() instanceof ItemTool tool && tool.getToolType() == Equipment.SHEARS && !this.getSheared() && !this.isChild())
{
if (!this.worldObj.client)
{

View file

@ -39,12 +39,12 @@ public class EntityCultivator extends EntityNPC {
public void startExecuting() {
super.startExecuting();
EntityCultivator.this.setItemNoUpdate(0, new ItemStack(Items.camera));
EntityCultivator.this.setItemNoUpdate(new ItemStack(Items.camera));
}
public void resetTask() {
super.resetTask();
EntityCultivator.this.setItemNoUpdate(0, null);
EntityCultivator.this.setItemNoUpdate(null);
}
});
this.tasks.addTask(10, new EntityAITakePlace(this));

View file

@ -35,7 +35,7 @@ public class EntityMage extends EntityNPC
{
this.drinking = false;
ItemStack itemstack = this.getHeldItem();
this.setItem(0, null);
this.setHeldItem(null);
if (itemstack != null && itemstack.getItem() instanceof ItemPotion potion)
{
@ -80,7 +80,7 @@ public class EntityMage extends EntityNPC
if (i != null)
{
this.setItem(0, new ItemStack(i));
this.setHeldItem(new ItemStack(i));
this.attackTimer = this.getHeldItem().getMaxItemUseDuration();
this.drinking = true;
this.setSpeedMod(0.165f);
@ -90,7 +90,7 @@ public class EntityMage extends EntityNPC
if(far || this.rand.chance()) {
EntityLiving target = this.getAttackTarget();
if(target == null) {
this.setItem(0, new ItemStack(Items.potion_poison));
this.setHeldItem(new ItemStack(Items.potion_poison));
}
else {
double d1 = target.posX + target.motionX - this.posX;
@ -98,24 +98,24 @@ public class EntityMage extends EntityNPC
float f = ExtMath.sqrtd(d1 * d1 + d3 * d3);
if (f >= 8.0F && !target.hasEffect(Effect.SLOWNESS))
{
this.setItem(0, new ItemStack(Items.potion_slowness));
this.setHeldItem(new ItemStack(Items.potion_slowness));
}
else if (target.getHealth() >= 8 && !target.hasEffect(Effect.POISON))
{
this.setItem(0, new ItemStack(Items.potion_poison));
this.setHeldItem(new ItemStack(Items.potion_poison));
}
else if (f <= 3.0F && !target.hasEffect(Effect.WEAKNESS) && this.rand.floatv() < 0.25F)
{
this.setItem(0, new ItemStack(Items.potion_weakness));
this.setHeldItem(new ItemStack(Items.potion_weakness));
}
else
{
this.setItem(0, new ItemStack(Items.potion_damage));
this.setHeldItem(new ItemStack(Items.potion_damage));
}
}
}
else {
this.setItem(0, null);
this.setHeldItem(null);
}
}
}

View file

@ -20,7 +20,6 @@ import common.ai.EntityAISwimming;
import common.ai.EntityAIWander;
import common.ai.EntityAIWatchClosest;
import common.ai.EntityAIWatchClosest2;
import common.attributes.UsageSlot;
import common.block.Block;
import common.block.artificial.BlockBed;
import common.collect.Lists;
@ -87,6 +86,7 @@ import common.util.BoundingBox;
import common.util.Clientside;
import common.util.ExtMath;
import common.util.Facing;
import common.util.Equipment;
import common.util.ParticleType;
import common.util.PortalType;
import common.util.Color;
@ -170,8 +170,10 @@ public abstract class EntityNPC extends EntityLiving
private boolean fleeing;
private boolean playing;
protected boolean noPickup;
private ItemStack[] equipment = new ItemStack[5];
private final ItemStack[] prevEquipment = new ItemStack[5];
private ItemStack heldItem;
private ItemStack prevHeldItem;
private ItemStack[] armor = new ItemStack[Equipment.ARMOR_SLOTS];
private final ItemStack[] prevArmor = new ItemStack[Equipment.ARMOR_SLOTS];
private InventoryBasic extraInventory;
private int inLove;
protected Alignment alignment = Alignment.NEUTRAL;
@ -920,7 +922,7 @@ public abstract class EntityNPC extends EntityLiving
return null;
}
protected ItemStack pickArmor(int slot) {
protected ItemStack pickArmor(Equipment slot) {
return null;
}
@ -1156,6 +1158,21 @@ public abstract class EntityNPC extends EntityLiving
protected int applyPotionDamageCalculations(DamageSource source, int damage) {
damage = super.applyPotionDamageCalculations(source, damage);
if(damage > 0) {
int k = EnchantmentHelper.getEnchantmentModifierDamage(this.getArmor(), source);
if (k > 20)
{
k = 20;
}
if (k > 0 && k <= 20)
{
int l = 25 - k;
float f1 = (float)damage * (float)l;
damage = (int)(f1 / 25.0F);
}
}
if(this.canUseMagic() && source.isMagicDamage())
damage = source.getEntity() == this ? 0 : (int)((double)damage * 0.15D);
return damage;
@ -1303,61 +1320,60 @@ public abstract class EntityNPC extends EntityLiving
ItemStack stack = itemEntity.getEntityItem();
if(stack.getItem().getRadiation(stack) > 0.0f)
return;
int slot = ItemArmor.getArmorPosition(stack);
Equipment slot = stack.getItem() instanceof ItemArmor armor ? armor.getArmorType() : null;
if(slot > -1) {
boolean flag = true;
ItemStack old = this.getItem(slot);
boolean flag = true;
ItemStack old = slot == null ? this.getHeldItem() : this.getArmor(slot);
if(old != null) {
if(slot == 0) {
if(stack.getItem() instanceof ItemTool t1 && t1.getToolType().isMelee() && !(old.getItem() instanceof ItemTool t2 && t2.getToolType().isMelee())) {
flag = true;
}
else if(stack.getItem() instanceof ItemTool itemsword && itemsword.getToolType().isMelee() && old.getItem() instanceof ItemTool itemsword1 && itemsword1.getToolType().isMelee()) {
if(itemsword.getAttackDamageBonus(stack) != itemsword1.getAttackDamageBonus(old)) {
flag = itemsword.getAttackDamageBonus(stack) > itemsword1.getAttackDamageBonus(old);
}
else {
flag = stack.getItemDamage() > old.getItemDamage() || stack.isItemEnchanted() && !old.isItemEnchanted();
}
}
else if(stack.getItem() instanceof ItemBow && old.getItem() instanceof ItemBow) {
flag = stack.isItemEnchanted() && !old.isItemEnchanted();
}
else if(stack.getItem() instanceof ItemGunBase && !(old.getItem() instanceof ItemBow)) {
flag = true;
}
else if(stack.getItem() instanceof ItemBow && !(old.getItem() instanceof ItemBow) && !(old.getItem() instanceof ItemTool tool && tool.getToolType().isMelee())) {
flag = true;
}
else {
flag = false;
}
}
else if(stack.getItem() instanceof ItemArmor && !(old.getItem() instanceof ItemArmor)) {
if(old != null) {
if(slot == null) {
if(stack.getItem() instanceof ItemTool t1 && t1.getToolType().isMelee() && !(old.getItem() instanceof ItemTool t2 && t2.getToolType().isMelee())) {
flag = true;
}
else if(stack.getItem() instanceof ItemArmor && old.getItem() instanceof ItemArmor) {
ItemArmor itemarmor = (ItemArmor)stack.getItem();
ItemArmor itemarmor1 = (ItemArmor)old.getItem();
if(itemarmor.damageReduceAmount != itemarmor1.damageReduceAmount) {
flag = itemarmor.damageReduceAmount > itemarmor1.damageReduceAmount;
else if(stack.getItem() instanceof ItemTool itemsword && itemsword.getToolType().isMelee() && old.getItem() instanceof ItemTool itemsword1 && itemsword1.getToolType().isMelee()) {
if(itemsword.getAttackDamageBonus(stack) != itemsword1.getAttackDamageBonus(old)) {
flag = itemsword.getAttackDamageBonus(stack) > itemsword1.getAttackDamageBonus(old);
}
else {
flag = stack.getItemDamage() > old.getItemDamage() || stack.isItemEnchanted() && !old.isItemEnchanted();
}
}
else if(stack.getItem() instanceof ItemBow && old.getItem() instanceof ItemBow) {
flag = stack.isItemEnchanted() && !old.isItemEnchanted();
}
else if(stack.getItem() instanceof ItemGunBase && !(old.getItem() instanceof ItemBow)) {
flag = true;
}
else if(stack.getItem() instanceof ItemBow && !(old.getItem() instanceof ItemBow) && !(old.getItem() instanceof ItemTool tool && tool.getToolType().isMelee())) {
flag = true;
}
else {
flag = false;
}
}
else if(stack.getItem() instanceof ItemArmor && !(old.getItem() instanceof ItemArmor)) {
flag = true;
}
else if(stack.getItem() instanceof ItemArmor && old.getItem() instanceof ItemArmor) {
ItemArmor itemarmor = (ItemArmor)stack.getItem();
ItemArmor itemarmor1 = (ItemArmor)old.getItem();
if(flag) { // && this.canPickUpItem(stack)) {
if(old != null) { // && this.rand.floatv() - 0.1F < this.dropChances[slot]) {
this.entityDropItem(old, 0.0F);
if(itemarmor.getArmorValue() != itemarmor1.getArmorValue()) {
flag = itemarmor.getArmorValue() > itemarmor1.getArmorValue();
}
else {
flag = stack.getItemDamage() > old.getItemDamage() || stack.isItemEnchanted() && !old.isItemEnchanted();
}
}
else {
flag = false;
}
}
if(flag) { // && this.canPickUpItem(stack)) {
if(old != null) { // && this.rand.floatv() - 0.1F < this.dropChances[slot]) {
this.entityDropItem(old, 0.0F);
}
// if(stack.getItem() == Items.diamond && itemEntity.getThrower() != null) {
// EntityNPC entityplayer = this.worldObj.getPlayer(itemEntity.getThrower());
@ -1367,12 +1383,14 @@ public abstract class EntityNPC extends EntityLiving
// }
// }
this.setItem(slot, stack);
if(slot == null)
this.setHeldItem(stack);
else
this.setArmor(slot, stack);
// this.dropChances[slot] = 2.0F;
// this.noDespawn = true;
this.onItemPickup(itemEntity, 1);
itemEntity.setDead();
}
this.onItemPickup(itemEntity, 1);
itemEntity.setDead();
}
if(!itemEntity.dead) {
stack = itemEntity.getEntityItem();
@ -1616,26 +1634,33 @@ public abstract class EntityNPC extends EntityLiving
private void updateNpc()
{
if(!this.worldObj.client) {
for (int j = 0; j < 5; ++j)
ItemStack itemstack2 = this.prevHeldItem;
ItemStack itemstack21 = this.getHeldItem();
if (!ItemStack.allEquals(itemstack21, itemstack2))
{
((AWorldServer)this.worldObj).sendToAllTrackingEntity(this, new SPacketEntityEquipment(this.getId(), 0, itemstack21));
this.prevHeldItem = itemstack21 == null ? null : itemstack21.copy();
}
for (Equipment slot : Equipment.ARMOR)
{
ItemStack itemstack = this.prevEquipment[j];
ItemStack itemstack1 = this.getItem(j);
ItemStack itemstack = this.prevArmor[slot.getIndex()];
ItemStack itemstack1 = this.getArmor(slot);
if (!ItemStack.allEquals(itemstack1, itemstack))
{
((AWorldServer)this.worldObj).sendToAllTrackingEntity(this, new SPacketEntityEquipment(this.getId(), j, itemstack1));
((AWorldServer)this.worldObj).sendToAllTrackingEntity(this, new SPacketEntityEquipment(this.getId(), slot.getIndex() + 1, itemstack1));
if (itemstack != null)
{
this.attributes.remove(itemstack.getAttributeModifiers(UsageSlot.getByIndex(j)), -1 - j);
this.attributes.remove(itemstack.getAttributeModifiers(slot), -1 - slot.getIndex());
}
if (itemstack1 != null)
{
this.attributes.add(itemstack1.getAttributeModifiers(UsageSlot.getByIndex(j)), -1 - j, itemstack1.getSize());
this.attributes.add(itemstack1.getAttributeModifiers(slot), -1 - slot.getIndex(), itemstack1.getSize());
}
this.prevEquipment[j] = itemstack1 == null ? null : itemstack1.copy();
this.prevArmor[slot.getIndex()] = itemstack1 == null ? null : itemstack1.copy();
}
}
}
@ -2660,24 +2685,49 @@ public abstract class EntityNPC extends EntityLiving
}
}
public void setItem(int slot, ItemStack stack)
public ItemStack getHeldItem()
{
return this.isPlayer() ? this.inventory.getCurrentItem() : this.heldItem;
}
public ItemStack[] getArmor()
{
return this.isPlayer() ? this.inventory.armorInventory : this.armor;
}
public ItemStack getArmor(Equipment slot)
{
return this.isPlayer() ? this.inventory.armorInventory[slot.getIndex()] : this.armor[slot.getIndex()];
}
public void setHeldItem(ItemStack stack)
{
if(this.slave && this.client == null) {
if (slot == 0)
this.inventory.mainInventory[this.inventory.currentItem] = stack;
else
this.inventory.armorInventory[slot - 1] = stack;
this.inventory.mainInventory[this.inventory.currentItem] = stack;
}
else if(this.isPlayer()) {
this.inventory.armorInventory[slot] = stack;
}
else {
this.setItemNoUpdate(slot, stack);
if(!this.worldObj.client && slot == 0)
else if(!this.isPlayer()) {
this.heldItem = stack;
if(!this.worldObj.client)
this.setCombatTask();
}
}
public void setArmor(Equipment slot, ItemStack stack)
{
if(this.isPlayer()) {
this.inventory.armorInventory[slot.getIndex()] = stack;
}
else {
this.armor[slot.getIndex()] = stack;
}
}
public void setItemNoUpdate(ItemStack stack)
{
if(!this.isPlayer())
this.heldItem = stack;
}
// END OTHER
@ -3222,13 +3272,18 @@ public abstract class EntityNPC extends EntityLiving
// this.setCanPickUpLoot(tagCompund.getBoolean("CanPickUpLoot"));
// }
if(tagCompund.hasList("Equipment")) {
List<TagObject> nbttaglist = tagCompund.getList("Equipment");
for(int i = 0; i < this.equipment.length; ++i) {
this.equipment[i] = ItemStack.readFromTag(nbttaglist.get(i));
if(!this.isPlayer()) {
if(tagCompund.hasObject("HeldItem")) {
this.heldItem = ItemStack.readFromTag(tagCompund.getObject("HeldItem"));
}
}
if(tagCompund.hasList("Armor")) {
List<TagObject> nbttaglist = tagCompund.getList("Armor");
for(int i = 0; i < this.armor.length; ++i) {
this.armor[i] = i < nbttaglist.size() ? ItemStack.readFromTag(nbttaglist.get(i)) : null;
}
}
}
// this.setSpecies(tagCompund.getString("Species"));
this.setChar(tagCompund.getString("Char"));
this.isWilling = tagCompund.getBool("Willing");
@ -3257,16 +3312,18 @@ public abstract class EntityNPC extends EntityLiving
this.setNpcClass(type);
this.setHeight(tagCompund.hasFloat("Height") ? tagCompund.getFloat("Height") : this.getBaseSize());
List<TagObject> nbttaglist = tagCompund.getList("Items");
for (int i = 0; i < nbttaglist.size(); ++i)
{
ItemStack itemstack = ItemStack.readFromTag(nbttaglist.get(i));
if (itemstack != null)
{
this.extraInventory.addStack(itemstack);
}
if(!this.isPlayer()) {
List<TagObject> nbttaglist = tagCompund.getList("Items");
for (int i = 0; i < nbttaglist.size(); ++i)
{
ItemStack itemstack = ItemStack.readFromTag(nbttaglist.get(i));
if (itemstack != null)
{
this.extraInventory.addStack(itemstack);
}
}
}
if(tagCompund.hasList("Offers")) {
@ -3356,19 +3413,27 @@ public abstract class EntityNPC extends EntityLiving
super.writeEntity(tagCompound);
// tagCompound.setBoolean("CanPickUpLoot", this.canPickUpLoot());
List<TagObject> nbttaglist0 = Lists.newArrayList();
for(int i = 0; i < this.equipment.length; ++i) {
TagObject nbttagcompound = new TagObject();
if(this.equipment[i] != null) {
this.equipment[i].writeTags(nbttagcompound);
if(!this.isPlayer()) {
TagObject held = new TagObject();
if(this.heldItem != null) {
this.heldItem.writeTags(held);
}
tagCompound.setObject("HeldItem", held);
List<TagObject> armor = Lists.newArrayList();
for(int i = 0; i < this.armor.length; ++i) {
TagObject item = new TagObject();
if(this.armor[i] != null) {
this.armor[i].writeTags(item);
}
armor.add(item);
}
nbttaglist0.add(nbttagcompound);
}
tagCompound.setList("Equipment", nbttaglist0);
tagCompound.setList("Armor", armor);
}
// tagCompound.setString("Species", this.getSpecies());
tagCompound.setString("Char", this.getChar());
tagCompound.setBool("Willing", this.isWilling);
@ -3382,19 +3447,21 @@ public abstract class EntityNPC extends EntityLiving
if(type != null)
tagCompound.setString("ClassType", this.species.classnames.inverse().get(type));
List<TagObject> nbttaglist = Lists.newArrayList();
for (int i = 0; i < this.extraInventory.getSizeInventory(); ++i)
{
ItemStack itemstack = this.extraInventory.getStackInSlot(i);
if (itemstack != null)
{
nbttaglist.add(itemstack.writeTags(new TagObject()));
}
if(!this.isPlayer()) {
List<TagObject> nbttaglist = Lists.newArrayList();
for (int i = 0; i < this.extraInventory.getSizeInventory(); ++i)
{
ItemStack itemstack = this.extraInventory.getStackInSlot(i);
if (itemstack != null)
{
nbttaglist.add(itemstack.writeTags(new TagObject()));
}
}
tagCompound.setList("Items", nbttaglist);
}
tagCompound.setList("Items", nbttaglist);
if(this.trades != null)
tagCompound.setList("Offers", this.trades.toTags());
tagCompound.setInt("healTimer", this.healTimer);
@ -3465,12 +3532,22 @@ public abstract class EntityNPC extends EntityLiving
this.inventory.damageArmor(p_70675_1_);
}
/**
* Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue
*/
public int getTotalArmorValue()
{
return this.isPlayer() ? this.inventory.getTotalArmorValue() : super.getTotalArmorValue();
if(this.isPlayer())
return this.inventory.getTotalArmorValue();
int i = 0;
for (ItemStack itemstack : this.armor)
{
if (itemstack != null && itemstack.getItem() instanceof ItemArmor)
{
int j = ((ItemArmor)itemstack.getItem()).getArmorValue();
i += j;
}
}
return i;
}
public boolean interactWith(Entity targetEntity)
@ -3486,7 +3563,7 @@ public abstract class EntityNPC extends EntityLiving
// }
// else
// {
ItemStack itemstack = this.getCurrentEquippedItem();
ItemStack itemstack = this.getHeldItem();
ItemStack itemstack1 = itemstack != null ? itemstack.copy() : null;
if (!targetEntity.interactFirst(this))
@ -3513,7 +3590,7 @@ public abstract class EntityNPC extends EntityLiving
}
else
{
if (itemstack != null && itemstack == this.getCurrentEquippedItem())
if (itemstack != null && itemstack == this.getHeldItem())
{
if (itemstack.isEmpty()) // && !this.creative)
{
@ -3530,14 +3607,6 @@ public abstract class EntityNPC extends EntityLiving
// }
}
/**
* Returns the currently being used item by the player.
*/
public ItemStack getCurrentEquippedItem()
{
return this.inventory.getCurrentItem();
}
/**
* Destroys the currently equipped item from the player's inventory.
*/
@ -3632,7 +3701,7 @@ public abstract class EntityNPC extends EntityLiving
}
EnchantmentHelper.applyArthropodEnchantments(this, targetEntity);
ItemStack itemstack = this.getCurrentEquippedItem();
ItemStack itemstack = this.getHeldItem();
Entity entity = targetEntity;
if (targetEntity instanceof EntityDragonPart)
@ -3915,11 +3984,6 @@ public abstract class EntityNPC extends EntityLiving
super.setInWeb();
}
}
public ItemStack getArmor(int slot)
{
return this.isPlayer() ? this.inventory.armorItemInSlot(slot) : this.equipment[slot + 1];
}
public void setExperience(int points) {
this.setXPStats(0.0f, 0, 0);
@ -4015,31 +4079,6 @@ public abstract class EntityNPC extends EntityLiving
this.warpChest = warpChest;
}
/**
* 0: Tool in Hand; 1-4: Armor
*/
public ItemStack getItem(int slot)
{
return this.isPlayer() ? (slot == 0 ? this.inventory.getCurrentItem() : this.inventory.armorInventory[slot - 1]) : this.equipment[slot];
}
/**
* Returns the item that this EntityLiving is holding, if any.
*/
public ItemStack getHeldItem()
{
return this.isPlayer() ? this.inventory.getCurrentItem() : this.equipment[0];
}
/**
* returns the inventory of this entity (only used in EntityNPCMP it seems)
*/
public ItemStack[] getInventory()
{
return this.isPlayer() ? this.inventory.armorInventory : this.equipment;
}
public boolean isPushedByWater()
{
return !this.isPlayer() || !this.flying;
@ -4101,7 +4140,7 @@ public abstract class EntityNPC extends EntityLiving
public boolean canOpen(String code)
{
ItemStack stack = this.getCurrentEquippedItem();
ItemStack stack = this.getHeldItem();
return stack != null && stack.getItem() instanceof ItemKey &&
stack.hasDisplayName() && stack.getDisplayName().equals(code);
}
@ -4193,17 +4232,17 @@ public abstract class EntityNPC extends EntityLiving
if(info.items != null) {
for(ItemStack stack : info.items) {
if(stack.getItem() instanceof ItemArmor)
this.setItem(((ItemArmor)stack.getItem()).armorType.getIndex(), stack);
this.setArmor(((ItemArmor)stack.getItem()).getArmorType(), stack);
else if(stack.getItem().getWieldType() != null)
this.setItem(0, stack);
this.setHeldItem(stack);
else
this.extraInventory.addStack(stack);
}
}
else {
this.setItem(0, this.pickItem());
for(int z = 0; z < 4; z++) {
this.setItem(z + 1, this.pickArmor(z));
this.setHeldItem(this.pickItem());
for(Equipment slot : Equipment.ARMOR) {
this.setArmor(slot, this.pickArmor(slot));
}
int items = this.pickItemAmount();
ItemStack stack;
@ -4307,9 +4346,14 @@ public abstract class EntityNPC extends EntityLiving
{
if(this.isPlayer())
return;
for (int i = 0; i < this.getInventory().length; ++i)
ItemStack itemstack1 = this.getHeldItem();
if (itemstack1 != null)
{
ItemStack itemstack = this.getItem(i);
this.entityDropItem(itemstack1, 0.0F);
}
for (Equipment slot : Equipment.ARMOR)
{
ItemStack itemstack = this.getArmor(slot);
if (itemstack != null)
{
this.entityDropItem(itemstack, 0.0F);
@ -4351,12 +4395,6 @@ public abstract class EntityNPC extends EntityLiving
return entity;
}
public void setItemNoUpdate(int slot, ItemStack stack)
{
if(!this.isPlayer())
this.equipment[slot] = stack;
}
public void setCombatTask()
{
if(!this.isPlayer()) {

View file

@ -214,7 +214,7 @@ public class EntityHook extends Entity implements IObjectData
{
if (!this.worldObj.client)
{
ItemStack itemstack = this.angler.getCurrentEquippedItem();
ItemStack itemstack = this.angler.getHeldItem();
if (this.angler.dead || !this.angler.isEntityAlive() || itemstack == null || itemstack.getItem() != Items.fishing_rod || this.getDistanceSqToEntity(this.angler) > 1024.0D)
{

View file

@ -41,7 +41,6 @@ import common.init.Items;
import common.init.SoundEvent;
import common.item.Item;
import common.item.ItemStack;
import common.item.material.ItemArmor;
import common.item.spawner.ItemMobTemplate;
import common.network.IPlayer;
import common.packet.SPacketEntityAttach;
@ -55,6 +54,7 @@ import common.util.BlockPos;
import common.util.BoundingBox;
import common.util.Clientside;
import common.util.ExtMath;
import common.util.Equipment;
import common.util.ParticleType;
import common.util.Serverside;
import common.util.Color;
@ -66,8 +66,6 @@ import common.world.AWorldServer;
public abstract class EntityLiving extends Entity
{
private static final ItemStack[] EMPTY_INV = new ItemStack[5];
protected AttributeMap attributes = new AttributeMap();
private final List<CombatEntry> combat = Lists.<CombatEntry>newArrayList();
private final Map<Effect, StatusEffect> effects = Maps.<Effect, StatusEffect>newEnumMap(Effect.class);
@ -845,9 +843,9 @@ public abstract class EntityLiving extends Entity
}
else
{
if ((source == DamageSource.anvil || source == DamageSource.fallingBlock) && this.getItem(4) != null)
if (this instanceof EntityNPC npc && (source == DamageSource.anvil || source == DamageSource.fallingBlock) && npc.getArmor(Equipment.HELMET) != null)
{
this.getItem(4).damage((int)(amount * 4.0F + this.rand.floatv() * (float)amount * 2.0F), this);
npc.getArmor(Equipment.HELMET).damage((int)(amount * 4.0F + this.rand.floatv() * (float)amount * 2.0F), this);
amount = (int)((float)amount * 0.75F);
}
@ -1153,23 +1151,9 @@ public abstract class EntityLiving extends Entity
this.attackedYaw = 0.0F;
}
/**
* Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue
*/
public int getTotalArmorValue()
{
int i = 0;
for (ItemStack itemstack : this.getInventory())
{
if (itemstack != null && itemstack.getItem() instanceof ItemArmor)
{
int j = ((ItemArmor)itemstack.getItem()).damageReduceAmount;
i += j;
}
}
return i;
return 0;
}
protected void damageArmor(int p_70675_1_)
@ -1215,21 +1199,7 @@ public abstract class EntityLiving extends Entity
}
else
{
int k = EnchantmentHelper.getEnchantmentModifierDamage(this.getInventory(), source);
if (k > 20)
{
k = 20;
}
if (k > 0 && k <= 20)
{
int l = 25 - k;
float f1 = (float)damage * (float)l;
damage = (int)(f1 / 25.0F);
}
return damage;
return damage;
}
}
@ -1398,17 +1368,6 @@ public abstract class EntityLiving extends Entity
// return CreatureType.UNDEFINED;
// }
public ItemStack getHeldItem() {
return null;
}
public ItemStack getItem(int slot) {
return null;
}
public ItemStack getArmor(int slotIn) {
return null;
}
// public abstract void setItem(int slot, ItemStack stack);
/**
@ -2363,7 +2322,7 @@ public abstract class EntityLiving extends Entity
if(fall.source() != DamageSource.fall && fall.source() != DamageSource.outOfWorld) {
Entity fallEnt = fall.source().getEntity();
if(fallEnt != null && (lastEnt == null || fallEnt != lastEnt)) {
ItemStack fallItem = fallEnt instanceof EntityLiving ? ((EntityLiving)fallEnt).getHeldItem() : null;
ItemStack fallItem = fallEnt instanceof EntityNPC ? ((EntityNPC)fallEnt).getHeldItem() : null;
receiver = fallEnt.isPlayer() ? ((EntityNPC)fallEnt).connection : null;
if(fallItem != null) { // && fallItem.hasDisplayName()) {
msg = String.format("%s wurde von %s mit %s zum Fallen verdammt", this.getColoredName(Color.CYAN),
@ -2379,7 +2338,7 @@ public abstract class EntityLiving extends Entity
}
}
else if(lastEnt != null) {
ItemStack lastItem = lastEnt instanceof EntityLiving ? ((EntityLiving)lastEnt).getHeldItem() : null;
ItemStack lastItem = lastEnt instanceof EntityNPC ? ((EntityNPC)lastEnt).getHeldItem() : null;
receiver = lastEnt.isPlayer() ? ((EntityNPC)lastEnt).connection : null;
if(lastItem != null) { // && lastItem.hasDisplayName()) {
msg = String.format("%s fiel zu tief und wurde von %s mit %s erledigt",
@ -3008,10 +2967,6 @@ public abstract class EntityLiving extends Entity
this.bodyHelper.updateRenderAngles();
return p_110146_2_;
}
public ItemStack[] getInventory() {
return EMPTY_INV;
}
// public LayerExtra getExtrasLayer() {
// return null;

View file

@ -135,7 +135,7 @@ import common.model.TextureAnimation;
import common.properties.Property;
import common.util.PortalType;
import common.util.Color;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.Util;
import common.world.State;
@ -244,7 +244,7 @@ public abstract class BlockRegistry {
Block stone = (new BlockStone()).setHardness(1.5F).setResistance(10.0F).setSound(SoundType.STONE).setDisplay("Stein");
register("stone", stone);
register("bedrock", (new BlockBedrock()).setHardness(1000.0F).setResistance(100000.0F).setSound(SoundType.STONE)
.setDisplay("Grundgestein").setTab(CheatTab.ROCK).setMiningTool(HarvestTool.PICKAXE, 6));
.setDisplay("Grundgestein").setTab(CheatTab.ROCK).setMiningTool(Equipment.PICKAXE, 6));
register("rock", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(15.0F).setSound(SoundType.STONE).setDisplay("Felsen").setTab(CheatTab.ROCK));
register("smooth_rock", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(15.0F).setSound(SoundType.STONE).setDisplay("Glatter Felsen").setTab(CheatTab.ROCK));
register("hellrock", (new BlockHellRock()).setHardness(0.4F).setSound(SoundType.STONE).setDisplay("Höllenstein"));
@ -263,8 +263,8 @@ public abstract class BlockRegistry {
register("smooth_sandstone", (new BlockSandStone("smooth")).setSound(SoundType.STONE).setHardness(0.8F).setDisplay("Glatter Sandstein"));
register("carved_sandstone", (new BlockSandStone("carved")).setSound(SoundType.STONE).setHardness(0.8F).setDisplay("Gemeißelter Sandstein"));
register("obsidian", (new BlockObsidian()).setHardness(50.0F).setResistance(2000.0F).setSound(SoundType.STONE)
.setDisplay("Obsidian").setMiningTool(HarvestTool.PICKAXE, 3));
register("clay", (new BlockClay()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Ton").setMiningTool(HarvestTool.SHOVEL));
.setDisplay("Obsidian").setMiningTool(Equipment.PICKAXE, 3));
register("clay", (new BlockClay()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Ton").setMiningTool(Equipment.SHOVEL));
register("hardened_clay", (new BlockHardenedClay()).setHardness(1.25F).setResistance(7.0F).setSound(SoundType.STONE).setDisplay("Gebrannter Ton"));
for(Color color : Color.values()) {
register(color.getName() + "_clay", (new BlockColoredClay(color)).setHardness(1.25F).setResistance(7.0F)
@ -272,16 +272,16 @@ public abstract class BlockRegistry {
}
register("coal_block", (new Block(Material.SOLID)).setHardness(5.0F).setResistance(10.0F)
.setSound(SoundType.STONE).setDisplay("Kohleblock").setTab(CheatTab.NATURE).setFlammable(5, 5));
register("sand", (new BlockFalling(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.SAND).setDisplay("Sand").setMiningTool(HarvestTool.SHOVEL).setTab(CheatTab.NATURE));
register("red_sand", (new BlockFalling(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.SAND).setDisplay("Roter Sand").setMiningTool(HarvestTool.SHOVEL).setTab(CheatTab.NATURE));
register("gravel", (new BlockGravel()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Kies").setMiningTool(HarvestTool.SHOVEL));
register("sand", (new BlockFalling(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.SAND).setDisplay("Sand").setMiningTool(Equipment.SHOVEL).setTab(CheatTab.NATURE));
register("red_sand", (new BlockFalling(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.SAND).setDisplay("Roter Sand").setMiningTool(Equipment.SHOVEL).setTab(CheatTab.NATURE));
register("gravel", (new BlockGravel()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Kies").setMiningTool(Equipment.SHOVEL));
register("ash", (new BlockFalling(Material.LOOSE)).setHardness(0.2F).setSound(SoundType.SAND).setDisplay("Asche")
.setTab(CheatTab.NATURE).setMiningTool(HarvestTool.SHOVEL));
register("snow_layer", (new BlockSnow()).setHardness(0.1F).setSound(SoundType.SNOW).setDisplay("Schnee").setOpacity(0).setMiningTool(HarvestTool.SHOVEL));
register("snow", (new BlockSnowBlock()).setHardness(0.2F).setSound(SoundType.SNOW).setDisplay("Schnee").setMiningTool(HarvestTool.SHOVEL));
register("ice", (new BlockIce()).setHardness(0.5F).setOpacity(3).setSound(SoundType.GLASS).setDisplay("Eis").setMiningTool(HarvestTool.PICKAXE, 0));
register("packed_ice", (new BlockPackedIce()).setHardness(0.5F).setSound(SoundType.GLASS).setDisplay("Packeis").setMiningTool(HarvestTool.PICKAXE, 0));
register("soul_sand", (new BlockSoulSand()).setHardness(0.5F).setSound(SoundType.SAND).setDisplay("Seelensand").setMiningTool(HarvestTool.SHOVEL));
.setTab(CheatTab.NATURE).setMiningTool(Equipment.SHOVEL));
register("snow_layer", (new BlockSnow()).setHardness(0.1F).setSound(SoundType.SNOW).setDisplay("Schnee").setOpacity(0).setMiningTool(Equipment.SHOVEL));
register("snow", (new BlockSnowBlock()).setHardness(0.2F).setSound(SoundType.SNOW).setDisplay("Schnee").setMiningTool(Equipment.SHOVEL));
register("ice", (new BlockIce()).setHardness(0.5F).setOpacity(3).setSound(SoundType.GLASS).setDisplay("Eis").setMiningTool(Equipment.PICKAXE, 0));
register("packed_ice", (new BlockPackedIce()).setHardness(0.5F).setSound(SoundType.GLASS).setDisplay("Packeis").setMiningTool(Equipment.PICKAXE, 0));
register("soul_sand", (new BlockSoulSand()).setHardness(0.5F).setSound(SoundType.SAND).setDisplay("Seelensand").setMiningTool(Equipment.SHOVEL));
register("glowstone", (new BlockGlowstone(Material.TRANSLUCENT)).setHardness(0.3F).setSound(SoundType.GLASS).setLight(1.0F)
.setDisplay("Glowstone"));
register("blackened_stone", (new BlockBlackenedStone()).setHardness(1.5F).setResistance(10.0F).setSound(SoundType.STONE).setDisplay("Schwarzstein"));
@ -307,35 +307,35 @@ public abstract class BlockRegistry {
register("coal_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE).setDisplay("Steinkohle"));
register("lapis_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE)
.setDisplay("Lapislazulierz").setMiningTool(HarvestTool.PICKAXE, 1));
.setDisplay("Lapislazulierz").setMiningTool(Equipment.PICKAXE, 1));
register("emerald_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE)
.setDisplay("Smaragderz").setMiningTool(HarvestTool.PICKAXE, 2));
.setDisplay("Smaragderz").setMiningTool(Equipment.PICKAXE, 2));
register("quartz_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE)
.setDisplay("Quarzerz"));
register("black_quartz_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE)
.setDisplay("Schwarzes Quarzerz"));
register("charge_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE)
.setDisplay("Geladenes Erz").setMiningTool(HarvestTool.PICKAXE, 2));
.setDisplay("Geladenes Erz").setMiningTool(Equipment.PICKAXE, 2));
for(MetalType metal : MetalType.values()) {
// String loc = metal.name.substring(0, 1).toUpperCase() + metal.name.substring(1);
register(metal.name + "_ore", (new BlockMetalOre(metal)).setHardness(3.0F).setResistance(5.0F)
.setDisplay(metal.display + "erz").setMiningTool(HarvestTool.PICKAXE, 1));
.setDisplay(metal.display + "erz").setMiningTool(Equipment.PICKAXE, 1));
}
for(OreType ore : OreType.values()) {
// String loc = ore.name.substring(0, 1).toUpperCase() + ore.name.substring(1);
register(ore.name + "_ore", (new BlockOre()).setHardness(3.0F).setResistance(5.0F).setSound(SoundType.STONE)
.setDisplay(ore.display + "erz").setMiningTool(HarvestTool.PICKAXE, ore.material.getHarvestLevel() - 1));
.setDisplay(ore.display + "erz").setMiningTool(Equipment.PICKAXE, ore.material.getHarvestLevel() - 1));
}
register("dirt", (new Block(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Erde").setMiningTool(HarvestTool.SHOVEL).setTab(CheatTab.NATURE));
register("grass", (new BlockGrass()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Gras").setMiningTool(HarvestTool.SHOVEL));
register("coarse_dirt", (new Block(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Grobe Erde").setMiningTool(HarvestTool.SHOVEL).setTab(CheatTab.NATURE));
register("podzol", (new BlockPodzol()).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Podsol").setMiningTool(HarvestTool.SHOVEL));
register("mycelium", (new BlockMycelium()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Myzel").setMiningTool(HarvestTool.SHOVEL));
register("dirt", (new Block(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Erde").setMiningTool(Equipment.SHOVEL).setTab(CheatTab.NATURE));
register("grass", (new BlockGrass()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Gras").setMiningTool(Equipment.SHOVEL));
register("coarse_dirt", (new Block(Material.LOOSE)).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Grobe Erde").setMiningTool(Equipment.SHOVEL).setTab(CheatTab.NATURE));
register("podzol", (new BlockPodzol()).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Podsol").setMiningTool(Equipment.SHOVEL));
register("mycelium", (new BlockMycelium()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Myzel").setMiningTool(Equipment.SHOVEL));
register("tian", (new Block(Material.SOLID)).setHardness(2.0F).setResistance(15.0F).setSound(SoundType.STONE)
.setDisplay("Tian").setTab(CheatTab.NATURE));
register("tian_soil", (new BlockTianSoil()).setHardness(2.0F).setResistance(15.0F).setSound(SoundType.STONE)
@ -343,15 +343,15 @@ public abstract class BlockRegistry {
register("moon_cheese", (new BlockTreasure(Material.SOFT)).setHardness(1.5F).setResistance(5.0F)
.setSound(SoundType.CLOTH).setDisplay("Mondkäse").setTab(CheatTab.NATURE));
register("slime_block", (new BlockSlime()).setDisplay("Schleimblock").setSound(SoundType.SLIME));
register("blackened_dirt", (new BlockBlackenedDirt()).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Schwarzerde").setMiningTool(HarvestTool.SHOVEL));
register("blackened_soil", (new BlockBlackenedSoil()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Schwarzgrund").setMiningTool(HarvestTool.SHOVEL));
register("swamp", (new BlockSwamp()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Sumpf").setMiningTool(HarvestTool.SHOVEL));
register("blackened_dirt", (new BlockBlackenedDirt()).setHardness(0.5F).setSound(SoundType.GRAVEL).setDisplay("Schwarzerde").setMiningTool(Equipment.SHOVEL));
register("blackened_soil", (new BlockBlackenedSoil()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Schwarzgrund").setMiningTool(Equipment.SHOVEL));
register("swamp", (new BlockSwamp()).setHardness(0.6F).setSound(SoundType.GRASS).setDisplay("Sumpf").setMiningTool(Equipment.SHOVEL));
for(BlockTallGrass.EnumType type : BlockTallGrass.EnumType.values()) {
register(type.getName(), (new BlockTallGrass(type)).setHardness(0.0F).setSound(SoundType.GRASS).setDisplay(type.getDisplay()).setMiningTool(HarvestTool.SHEARS));
register(type.getName(), (new BlockTallGrass(type)).setHardness(0.0F).setSound(SoundType.GRASS).setDisplay(type.getDisplay()).setMiningTool(Equipment.SHEARS));
}
register("deadbush", (new BlockDeadBush()).setHardness(0.0F).setSound(SoundType.GRASS).setDisplay("Toter Busch"));
for(BlockFlower.EnumFlowerType type : BlockFlower.EnumFlowerType.values()) {
@ -363,8 +363,8 @@ public abstract class BlockRegistry {
Block cactus = (new BlockCactus()).setHardness(0.4F).setSound(SoundType.CLOTH).setDisplay("Kaktus");
register("cactus", cactus);
register("reeds", (new BlockReed()).setHardness(0.0F).setSound(SoundType.GRASS).setDisplay("Zuckerrohr").setTab(CheatTab.PLANTS));
register("vine", (new BlockVine(false)).setHardness(0.2F).setSound(SoundType.GRASS).setDisplay("Ranken").setMiningTool(HarvestTool.SHEARS));
register("swamp_vine", (new BlockVine(true)).setHardness(0.2F).setSound(SoundType.GRASS).setDisplay("Sumpfranken").setMiningTool(HarvestTool.SHEARS));
register("vine", (new BlockVine(false)).setHardness(0.2F).setSound(SoundType.GRASS).setDisplay("Ranken").setMiningTool(Equipment.SHEARS));
register("swamp_vine", (new BlockVine(true)).setHardness(0.2F).setSound(SoundType.GRASS).setDisplay("Sumpfranken").setMiningTool(Equipment.SHEARS));
register("waterlily", (new BlockLilyPad()).setHardness(0.0F).setSound(SoundType.GRASS).setDisplay("Seerosenblatt"));
@ -407,9 +407,9 @@ public abstract class BlockRegistry {
register("lapis_block", (new Block(Material.SOLID)).setHardness(3.0F).setResistance(5.0F)
.setSound(SoundType.STONE).setDisplay("Lapislazuliblock").setTab(CheatTab.GEMS).setMiningTool(HarvestTool.PICKAXE, 1));
.setSound(SoundType.STONE).setDisplay("Lapislazuliblock").setTab(CheatTab.GEMS).setMiningTool(Equipment.PICKAXE, 1));
register("emerald_block", (new Block(Material.SOLID)).setHardness(5.0F).setResistance(10.0F)
.setSound(SoundType.STONE).setDisplay("Smaragdblock").setTab(CheatTab.GEMS).setMiningTool(HarvestTool.PICKAXE, 2));
.setSound(SoundType.STONE).setDisplay("Smaragdblock").setTab(CheatTab.GEMS).setMiningTool(Equipment.PICKAXE, 2));
register("charged_block", (new BlockMagnetic(Material.SOLID)).setHardness(5.0F).setResistance(10.0F)
.setSound(SoundType.STONE).setDisplay("Geladener Block").setTab(CheatTab.GEMS));
@ -424,7 +424,7 @@ public abstract class BlockRegistry {
for(Color color : Color.values()) {
register(color.getName() + "_wool", (new BlockWool(color)).setHardness(0.8F).setSound(SoundType.CLOTH).setDisplay(color.getSubject(-1) + " Wolle").setMiningTool(HarvestTool.SHEARS));
register(color.getName() + "_wool", (new BlockWool(color)).setHardness(0.8F).setSound(SoundType.CLOTH).setDisplay(color.getSubject(-1) + " Wolle").setMiningTool(Equipment.SHEARS));
}
for(Color color : Color.values()) {
register(color.getName() + "_carpet", (new BlockCarpet(color)).setHardness(0.1F).setSound(SoundType.CLOTH).setDisplay(color.getSubject(1) + " Teppich").setOpacity(0));
@ -433,7 +433,7 @@ public abstract class BlockRegistry {
register(color.getName() + "_bed", (new BlockBed(color)).setSound(SoundType.WOOD).setHardness(0.2F).setDisplay(color.getSubject(0) + " Bett"));
}
register("ladder", (new BlockLadder()).setHardness(0.4F).setSound(SoundType.LADDER).setDisplay("Leiter").setMiningTool(HarvestTool.AXE));
register("ladder", (new BlockLadder()).setHardness(0.4F).setSound(SoundType.LADDER).setDisplay("Leiter").setMiningTool(Equipment.AXE));
register("bookshelf", (new BlockBookshelf()).setHardness(1.5F).setSound(SoundType.WOOD).setDisplay("Bücherregal"));
register("cake", (new BlockCake()).setHardness(0.5F).setSound(SoundType.CLOTH).setDisplay("Kuchen").setTab(CheatTab.DECORATION));
register("dragon_egg", (new BlockDragonEgg()).setHardness(3.0F).setResistance(15.0F).setSound(SoundType.STONE)
@ -466,7 +466,7 @@ public abstract class BlockRegistry {
register("portal_frame", (new BlockPortalFrame()).setSound(SoundType.GLASS).setLight(0.125F).setHardness(5.0F)
.setDisplay("Portalrahmen").setResistance(2000.0F).setTab(CheatTab.TECHNOLOGY));
register("farmland", (new BlockFarmland()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Ackerboden").setMiningTool(HarvestTool.SHOVEL).setTab(CheatTab.PLANTS));
register("farmland", (new BlockFarmland()).setHardness(0.6F).setSound(SoundType.GRAVEL).setDisplay("Ackerboden").setMiningTool(Equipment.SHOVEL).setTab(CheatTab.PLANTS));
register("wheats", (new BlockCrops()).setDisplay("Getreide"));
register("carrots", (new BlockCarrot()).setDisplay("Karotten"));
register("potatoes", (new BlockPotato()).setDisplay("Kartoffeln"));
@ -478,12 +478,12 @@ public abstract class BlockRegistry {
for(MetalType metal : MetalType.values()) {
// String loc = metal.name.substring(0, 1).toUpperCase() + metal.name.substring(1);
register(metal.name + "_block", (new BlockMetalBlock(metal)).setHardness(5.0F).setResistance(10.0F)
.setDisplay(metal.display + "block").setMiningTool(HarvestTool.PICKAXE, 1));
.setDisplay(metal.display + "block").setMiningTool(Equipment.PICKAXE, 1));
}
for(OreType ore : OreType.values()) {
// String loc = ore.name.substring(0, 1).toUpperCase() + ore.name.substring(1);
register(ore.name + "_block", (new Block(Material.SOLID)).setHardness(5.0F).setResistance(10.0F).setSound(SoundType.STONE)
.setDisplay(ore.display + "block").setTab(CheatTab.GEMS).setMiningTool(HarvestTool.PICKAXE, ore.material.getHarvestLevel() - 1));
.setDisplay(ore.display + "block").setTab(CheatTab.GEMS).setMiningTool(Equipment.PICKAXE, ore.material.getHarvestLevel() - 1));
}
@ -636,7 +636,7 @@ public abstract class BlockRegistry {
register("hopper", (new BlockHopper()).setHardness(3.0F).setResistance(8.0F).setSound(SoundType.STONE).setDisplay("Trichter"));
register("tian_reactor", (new BlockTianReactor()).setHardness(3.0F).setResistance(8.0F).setSound(SoundType.STONE).setDisplay("Tianreaktor"));
register("rail", (new BlockRail()).setHardness(0.7F).setSound(SoundType.STONE).setDisplay("Schiene").setMiningTool(HarvestTool.PICKAXE, 0));
register("rail", (new BlockRail()).setHardness(0.7F).setSound(SoundType.STONE).setDisplay("Schiene").setMiningTool(Equipment.PICKAXE, 0));
register("lever", (new BlockLever()).setHardness(0.5F).setSound(SoundType.WOOD).setDisplay("Hebel"));

View file

@ -19,16 +19,10 @@ import common.item.Item;
import common.item.ItemStack;
import common.item.material.ItemDye;
import common.util.Color;
import common.util.Equipment;
public abstract class CraftingRegistry
{
private static final String[][] TOOLS = new String[][] {
{"XXX", " # ", " # "}, {"X", "#", "#"}, {"XX", "X#", " #"}
};
private static final String[][] WEAPONS = new String[][] {{"X", "X", "#"}};
private static final String[][] ARMOR = new String[][] {
{"XXX", "X X"}, {"X X", "XXX", "XXX"}, {"XXX", "X X", "X X"}, {"X X", "X X"}
};
private static final Object[][] COMPRESSED = new Object[][] {
{Items.emerald_block, new ItemStack(Items.emerald, 9)},
{Items.lapis_block, new ItemStack(Items.lapis_lazuli, 9)},
@ -39,53 +33,29 @@ public abstract class CraftingRegistry
};
private static final List<IRecipe> recipes = Lists.<IRecipe>newArrayList();
private static void registerTools(ToolMaterial material, Item item, String name) {
for(Equipment tool : Equipment.values()) {
if(tool.getRecipe().length > 0 && tool.canRegister(material))
add(new ItemStack(ItemRegistry.byName(name + "_" + tool.getName())), tool.getRecipe(), '#', Items.stick, 'X', item);
}
}
static void register()
{
for(OreType ore : OreType.values()) {
Item item = ItemRegistry.byName(ore.item);
ore.material.addRepairItem(item);
if(ore.material.hasTools()) {
add(new ItemStack(ItemRegistry.byName(ore.name + "_pickaxe")), TOOLS[0], '#', Items.stick, 'X', item);
add(new ItemStack(ItemRegistry.byName(ore.name + "_shovel")), TOOLS[1], '#', Items.stick, 'X', item);
add(new ItemStack(ItemRegistry.byName(ore.name + "_axe")), TOOLS[2], '#', Items.stick, 'X', item);
}
if(ore.material.hasExtras()) {
add(new ItemStack(ItemRegistry.byName(ore.name + "_shears")), " #", "# ", '#', item);
}
if(ore.material.hasWeapons()) {
add(new ItemStack(ItemRegistry.byName(ore.name + "_sword")), WEAPONS[0], '#', Items.stick, 'X', item);
}
if(ore.material.hasArmor()) {
add(new ItemStack(ItemRegistry.byName(ore.name + "_helmet")), ARMOR[0], 'X', item);
add(new ItemStack(ItemRegistry.byName(ore.name + "_chestplate")), ARMOR[1], 'X', item);
add(new ItemStack(ItemRegistry.byName(ore.name + "_leggings")), ARMOR[2], 'X', item);
add(new ItemStack(ItemRegistry.byName(ore.name + "_boots")), ARMOR[3], 'X', item);
}
registerTools(ore.material, item, ore.name);
Item block = ItemRegistry.byName(ore.name + "_block");
add(new ItemStack(block), "###", "###", "###", '#', item);
add(new ItemStack(item, 9), "#", '#', block);
}
for(MetalType metal : MetalType.values()) {
Item item = ItemRegistry.byName(metal.isPowder ? (metal.name + "_powder") : (metal.name + "_ingot"));
if(metal.material != null)
if(metal.material != null) {
metal.material.addRepairItem(item);
if(metal.material != null && metal.material.hasTools()) {
add(new ItemStack(ItemRegistry.byName(metal.name + "_pickaxe")), TOOLS[0], '#', Items.stick, 'X', item);
add(new ItemStack(ItemRegistry.byName(metal.name + "_shovel")), TOOLS[1], '#', Items.stick, 'X', item);
add(new ItemStack(ItemRegistry.byName(metal.name + "_axe")), TOOLS[2], '#', Items.stick, 'X', item);
}
if(metal.material != null && metal.material.hasExtras()) {
add(new ItemStack(ItemRegistry.byName(metal.name + "_shears")), " #", "# ", '#', item);
}
if(metal.material != null && metal.material.hasWeapons()) {
add(new ItemStack(ItemRegistry.byName(metal.name + "_sword")), WEAPONS[0], '#', Items.stick, 'X', item);
}
if(metal.material != null && metal.material.hasArmor()) {
add(new ItemStack(ItemRegistry.byName(metal.name + "_helmet")), ARMOR[0], 'X', item);
add(new ItemStack(ItemRegistry.byName(metal.name + "_chestplate")), ARMOR[1], 'X', item);
add(new ItemStack(ItemRegistry.byName(metal.name + "_leggings")), ARMOR[2], 'X', item);
add(new ItemStack(ItemRegistry.byName(metal.name + "_boots")), ARMOR[3], 'X', item);
registerTools(metal.material, item, metal.name);
}
Item block = ItemRegistry.byName(metal.name + "_block");
add(new ItemStack(block), "###", "###", "###", '#', item);
@ -95,23 +65,7 @@ public abstract class CraftingRegistry
for(String itm : tool.items) {
Item item = ItemRegistry.byName(itm);
tool.material.addRepairItem(item);
if(tool.material.hasTools()) {
add(new ItemStack(ItemRegistry.byName(tool.name + "_pickaxe")), TOOLS[0], '#', Items.stick, 'X', item);
add(new ItemStack(ItemRegistry.byName(tool.name + "_shovel")), TOOLS[1], '#', Items.stick, 'X', item);
add(new ItemStack(ItemRegistry.byName(tool.name + "_axe")), TOOLS[2], '#', Items.stick, 'X', item);
}
if(tool.material.hasExtras()) {
add(new ItemStack(ItemRegistry.byName(tool.name + "_shears")), " #", "# ", '#', item);
}
if(tool.material.hasWeapons()) {
add(new ItemStack(ItemRegistry.byName(tool.name + "_sword")), WEAPONS[0], '#', Items.stick, 'X', item);
}
if(tool.material.hasArmor()) {
add(new ItemStack(ItemRegistry.byName(tool.name + "_helmet")), ARMOR[0], 'X', item);
add(new ItemStack(ItemRegistry.byName(tool.name + "_chestplate")), ARMOR[1], 'X', item);
add(new ItemStack(ItemRegistry.byName(tool.name + "_leggings")), ARMOR[2], 'X', item);
add(new ItemStack(ItemRegistry.byName(tool.name + "_boots")), ARMOR[3], 'X', item);
}
registerTools(tool.material, item, tool.name);
}
}

View file

@ -6,7 +6,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import common.attributes.UsageSlot;
import common.block.Block;
import common.block.liquid.BlockDynamicLiquid;
import common.block.liquid.BlockLiquid;
@ -37,7 +36,7 @@ import common.item.material.ItemBucket;
import common.item.material.ItemDye;
import common.item.material.ItemEnchantedBook;
import common.item.material.ItemGrindedBones;
import common.item.material.ItemHorseArmor;
import common.item.material.ItemAnimalArmor;
import common.item.material.ItemMetal;
import common.item.material.ItemRecord;
import common.item.material.ItemSeeds;
@ -77,7 +76,7 @@ import common.item.weapon.ItemTrident;
import common.log.Log;
import common.util.Pair;
import common.util.Color;
import common.util.HarvestTool;
import common.util.Equipment;
import common.util.Util;
import common.world.Weather;
@ -127,24 +126,10 @@ public abstract class ItemRegistry {
}
private static void registerTools(ToolMaterial material, String name, String prefix) {
if(material.hasTools()) {
register(name + "_shovel", (new ItemTool(material, HarvestTool.SHOVEL)).setDisplay(prefix + "schaufel"));
register(name + "_pickaxe", (new ItemTool(material, HarvestTool.PICKAXE)).setDisplay(prefix + "spitzhacke"));
register(name + "_axe", (new ItemTool(material, HarvestTool.AXE)).setDisplay(prefix + "axt"));
}
if(material.hasExtras()) {
register(name + "_shears", (new ItemTool(material, HarvestTool.SHEARS)).setDisplay(prefix + "schere"));
register(name + "_horse_armor", (new ItemHorseArmor(material, name)).setDisplay(prefix + "pferderüstung"));
}
if(material.hasWeapons()) {
register(name + "_sword", (new ItemTool(material, HarvestTool.SWORD)).setDisplay(prefix + "schwert"));
}
if(material.hasArmor()) {
register(name + "_helmet", (new ItemArmor(material, name, UsageSlot.HEAD)).setDisplay(prefix == null ? "Kappe" : prefix + "helm"));
register(name + "_chestplate", (new ItemArmor(material, name, UsageSlot.BODY)).setDisplay(prefix == null ? "Jacke" : prefix + "brustpanzer"));
register(name + "_leggings", (new ItemArmor(material, name, UsageSlot.LEGS)).setDisplay(prefix == null ? "Hose" : prefix + "beinschutz"));
register(name + "_boots", (new ItemArmor(material, name, UsageSlot.FEET)).setDisplay(prefix == null ? "Stiefel" : prefix + "stiefel"));
}
for(Equipment tool : Equipment.values()) {
if(tool.canRegister(material))
register(name + "_" + tool.getName(), (tool.isArmor() ? (tool.isAnimalArmor() ? new ItemAnimalArmor(material, name) : new ItemArmor(material, name, tool)) : new ItemTool(material, tool)).setDisplay(tool.getDisplay(prefix, prefix == null)));
}
}
static void register() {

View file

@ -24,7 +24,7 @@ import common.item.material.ItemBucket;
import common.item.material.ItemDye;
import common.item.material.ItemEnchantedBook;
import common.item.material.ItemGrindedBones;
import common.item.material.ItemHorseArmor;
import common.item.material.ItemAnimalArmor;
import common.item.material.ItemMetal;
import common.item.material.ItemRecord;
import common.item.material.ItemSeeds;
@ -302,7 +302,7 @@ public abstract class Items {
public static final ItemArmor diamond_boots = get("diamond_boots");
public static final ItemArmor diamond_chestplate = get("diamond_chestplate");
public static final ItemArmor diamond_helmet = get("diamond_helmet");
public static final ItemHorseArmor diamond_horse_armor = get("diamond_horse_armor");
public static final ItemAnimalArmor diamond_horse_armor = get("diamond_horse_armor");
public static final ItemArmor diamond_leggings = get("diamond_leggings");
public static final Item diamond_ore = get("diamond_ore");
public static final ItemTool diamond_pickaxe = get("diamond_pickaxe");
@ -358,7 +358,7 @@ public abstract class Items {
public static final ItemArmor gold_boots = get("gold_boots");
public static final ItemArmor gold_chestplate = get("gold_chestplate");
public static final ItemArmor gold_helmet = get("gold_helmet");
public static final ItemHorseArmor gold_horse_armor = get("gold_horse_armor");
public static final ItemAnimalArmor gold_horse_armor = get("gold_horse_armor");
public static final ItemMetal gold_ingot = get("gold_ingot");
public static final ItemArmor gold_leggings = get("gold_leggings");
public static final Item gold_nugget = get("gold_nugget");
@ -408,7 +408,7 @@ public abstract class Items {
public static final ItemArmor iron_chestplate = get("iron_chestplate");
public static final Item iron_door = get("iron_door");
public static final ItemArmor iron_helmet = get("iron_helmet");
public static final ItemHorseArmor iron_horse_armor = get("iron_horse_armor");
public static final ItemAnimalArmor iron_horse_armor = get("iron_horse_armor");
public static final ItemMetal iron_ingot = get("iron_ingot");
public static final ItemArmor iron_leggings = get("iron_leggings");
public static final Item iron_ore = get("iron_ore");

View file

@ -2,15 +2,11 @@ package common.init;
import java.util.Set;
import common.attributes.UsageSlot;
import common.collect.Sets;
import common.item.Item;
import common.util.Equipment;
public class ToolMaterial {
private static final int[] MAX_DAMAGE = new int[] {11, 16, 15, 13};
private static final float[] RAD_REDUCE = new float[] {1.0f, 1.7f, 1.6f, 1.4f};
private static final float[] MAG_REDUCE = new float[] {1.0f, 1.2f, 1.1f, 1.0f};
private final int harvestLevel;
private final int durability;
private final int efficiency;
@ -121,20 +117,20 @@ public class ToolMaterial {
return this.repair.contains(item);
}
public int getDurability(UsageSlot armorType) {
return armorType.getArmorSlot() < 0 ? 0 : MAX_DAMAGE[armorType.getArmorSlot()] * this.maxDamageFactor;
public int getDurability(Equipment armorType) {
return armorType.getDamage() * this.maxDamageFactor;
}
public float getRadiationReduction(UsageSlot armorType) {
return armorType.getArmorSlot() < 0 ? 0.0f : RAD_REDUCE[armorType.getArmorSlot()] * this.radiationResistance;
public float getRadiationReduction(Equipment armorType) {
return armorType.getPhysicalResistance() * this.radiationResistance;
}
public float getMagicReduction(UsageSlot armorType) {
return armorType.getArmorSlot() < 0 ? 0.0f : MAG_REDUCE[armorType.getArmorSlot()] * this.magicResistance;
public float getMagicReduction(Equipment armorType) {
return armorType.getMagicalResistance() * this.magicResistance;
}
public int getDamageReduction(UsageSlot armorType) {
return armorType.getArmorSlot() < 0 ? 0 : this.damageReduction[armorType.getArmorSlot()];
public int getDamageReduction(Equipment armorType) {
return armorType.getIndex() >= this.damageReduction.length ? 0 : this.damageReduction[armorType.getIndex()];
}
public int getArmorEnchantability() {

View file

@ -3,12 +3,12 @@ package common.inventory;
import java.util.List;
import common.attributes.AttributeMap;
import common.attributes.UsageSlot;
import common.collect.Lists;
import common.entity.npc.EntityNPC;
import common.init.CraftingRegistry;
import common.item.ItemStack;
import common.item.material.ItemArmor;
import common.util.Equipment;
public class ContainerPlayer extends Container {
private final InventoryCrafting baseCrafting = new InventoryCrafting(new Container() {
@ -42,10 +42,10 @@ public class ContainerPlayer extends Container {
}
}
for (int k = 0; k < 4; ++k)
for (Equipment slot : Equipment.ARMOR)
{
final int k_f = k;
this.addSlotToContainer(new Slot(playerInventory, playerInventory.getSizeInventory() - 1 - k, 8, 8 + k * 18)
final Equipment type = slot;
this.addSlotToContainer(new Slot(playerInventory, 27 + 9 + slot.getIndex(), 8 + (slot.getIndex() / 4) * 18, 8 + (slot.getIndex() % 4) * 18)
{
public int getSlotStackLimit()
{
@ -53,12 +53,8 @@ public class ContainerPlayer extends Container {
}
public boolean isItemValid(ItemStack stack)
{
return stack != null && stack.getItem() instanceof ItemArmor && ((ItemArmor)stack.getItem()).armorType.getArmorSlot() == k_f; // : (stack.getItem() != Items.pumpkin && stack.getItem() != Items.skull ? false : k_f == 0));
return stack != null && stack.getItem() instanceof ItemArmor armor && armor.getArmorType() == type;
}
// public String getSlotTexture()
// {
// return ItemArmor.EMPTY_SLOT_NAMES[k_f];
// }
});
}
@ -81,7 +77,7 @@ public class ContainerPlayer extends Container {
protected Slot addSlotToContainer(Slot slotIn)
{
slotIn = super.addSlotToContainer(slotIn);
if(slotIn.slotNumber >= 9)
if(slotIn.slotNumber >= 5 + Equipment.ARMOR_SLOTS)
this.lastStacks.add((ItemStack)null);
return slotIn;
}
@ -91,24 +87,24 @@ public class ContainerPlayer extends Container {
for (int i = 0; i < this.inventorySlots.size(); ++i)
{
Slot slot = this.inventorySlots.get(i);
if(slot.slotNumber >= 9) {
if(slot.slotNumber >= 5 + Equipment.ARMOR_SLOTS) {
ItemStack current = slot.getStack();
ItemStack last = (ItemStack)this.lastStacks.get(i - 9);
ItemStack last = (ItemStack)this.lastStacks.get(i - (5 + Equipment.ARMOR_SLOTS));
if (!ItemStack.allEquals(last, current))
{
if (last != null)
{
this.attributes.remove(last.getAttributeModifiers(UsageSlot.INVENTORY), slot.getIndex());
this.attributes.remove(last.getAttributeModifiers(Equipment.PICKAXE), slot.getIndex());
}
if (current != null)
{
this.attributes.add(current.getAttributeModifiers(UsageSlot.INVENTORY), slot.getIndex(), current.getSize());
this.attributes.add(current.getAttributeModifiers(Equipment.PICKAXE), slot.getIndex(), current.getSize());
}
last = current == null ? null : current.copy();
this.lastStacks.set(i - 9, last);
this.lastStacks.set(i - (5 + Equipment.ARMOR_SLOTS), last);
}
}
}
@ -177,7 +173,7 @@ public class ContainerPlayer extends Container {
if (index == 0)
{
if (!this.mergeItemStack(itemstack1, 9, 45, true))
if (!this.mergeItemStack(itemstack1, 5 + Equipment.ARMOR_SLOTS, 5 + Equipment.ARMOR_SLOTS + 27 + 9, true))
{
return null;
}
@ -186,42 +182,42 @@ public class ContainerPlayer extends Container {
}
else if (index >= 1 && index < 5)
{
if (!this.mergeItemStack(itemstack1, 9, 45, false))
if (!this.mergeItemStack(itemstack1, 5 + Equipment.ARMOR_SLOTS, 5 + Equipment.ARMOR_SLOTS + 27 + 9, false))
{
return null;
}
}
else if (index >= 5 && index < 9)
else if (index >= 5 && index < 5 + Equipment.ARMOR_SLOTS)
{
if (!this.mergeItemStack(itemstack1, 9, 45, false))
if (!this.mergeItemStack(itemstack1, 5 + Equipment.ARMOR_SLOTS, 5 + Equipment.ARMOR_SLOTS + 27 + 9, false))
{
return null;
}
}
else if (itemstack.getItem() instanceof ItemArmor && !((Slot)this.inventorySlots.get(5 + ((ItemArmor)itemstack.getItem()).armorType.getArmorSlot())).getHasStack())
else if (itemstack.getItem() instanceof ItemArmor && !((Slot)this.inventorySlots.get(5 + Equipment.ARMOR_SLOTS + ((ItemArmor)itemstack.getItem()).getArmorType().getIndex())).getHasStack())
{
int i = 5 + ((ItemArmor)itemstack.getItem()).armorType.getArmorSlot();
int idx = 5 + Equipment.ARMOR_SLOTS + ((ItemArmor)itemstack.getItem()).getArmorType().getIndex();
if (!this.mergeItemStack(itemstack1, i, i + 1, false))
if (!this.mergeItemStack(itemstack1, idx, idx + 1, false))
{
return null;
}
}
else if (index >= 9 && index < 36)
else if (index >= 5 + Equipment.ARMOR_SLOTS && index < 5 + Equipment.ARMOR_SLOTS + 27)
{
if (!this.mergeItemStack(itemstack1, 36, 45, false))
if (!this.mergeItemStack(itemstack1, 5 + Equipment.ARMOR_SLOTS + 27, 5 + Equipment.ARMOR_SLOTS + 27 + 9, false))
{
return null;
}
}
else if (index >= 36 && index < 45)
else if (index >= 5 + Equipment.ARMOR_SLOTS + 27 && index < 5 + Equipment.ARMOR_SLOTS + 27 + 9)
{
if (!this.mergeItemStack(itemstack1, 9, 36, false))
if (!this.mergeItemStack(itemstack1, 5 + Equipment.ARMOR_SLOTS, 5 + Equipment.ARMOR_SLOTS + 27, false))
{
return null;
}
}
else if (!this.mergeItemStack(itemstack1, 9, 45, false))
else if (!this.mergeItemStack(itemstack1, 5 + Equipment.ARMOR_SLOTS, 5 + Equipment.ARMOR_SLOTS + 27 + 9, false))
{
return null;
}

View file

@ -7,6 +7,8 @@ import common.item.ItemStack;
import common.item.material.ItemArmor;
import common.item.tool.ItemTool;
import common.tags.TagObject;
import common.util.Equipment;
import java.util.List;
public class InventoryPlayer implements IInventory
@ -17,7 +19,7 @@ public class InventoryPlayer implements IInventory
public ItemStack[] mainInventory = new ItemStack[36];
/** An array of 4 item stacks containing the currently worn armor pieces. */
public ItemStack[] armorInventory = new ItemStack[4];
public ItemStack[] armorInventory = new ItemStack[Equipment.ARMOR_SLOTS];
/** The index of the currently held item (0-8). */
public int currentItem;
@ -459,7 +461,7 @@ public class InventoryPlayer implements IInventory
public void fromTag(List<TagObject> list)
{
this.mainInventory = new ItemStack[36];
this.armorInventory = new ItemStack[4];
this.armorInventory = new ItemStack[Equipment.ARMOR_SLOTS];
for (int i = 0; i < list.size(); ++i)
{
@ -487,7 +489,7 @@ public class InventoryPlayer implements IInventory
*/
public int getSizeInventory()
{
return this.mainInventory.length + 4;
return this.mainInventory.length + this.armorInventory.length;
}
/**
@ -521,16 +523,6 @@ public class InventoryPlayer implements IInventory
return stack != null && stack.getItem() instanceof ItemTool tool && block.getMiningTool() == tool.getToolType() && (!tool.getToolType().isLevelled() || tool.getToolMaterial().getHarvestLevel() >= block.getMiningLevel());
}
/**
* returns a player armor item (as itemstack) contained in specified armor slot.
*
* @param slotIn the slot index requested
*/
public ItemStack armorItemInSlot(int slotIn)
{
return this.armorInventory[slotIn];
}
/**
* Based on the damage values and maximum damage values of each armor item, returns the current armor value.
*/
@ -542,7 +534,7 @@ public class InventoryPlayer implements IInventory
{
if (this.armorInventory[j] != null && this.armorInventory[j].getItem() instanceof ItemArmor)
{
int k = ((ItemArmor)this.armorInventory[j].getItem()).damageReduceAmount;
int k = ((ItemArmor)this.armorInventory[j].getItem()).getArmorValue();
i += k;
}
}

View file

@ -3,7 +3,6 @@ package common.item;
import java.util.List;
import java.util.Map;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.block.Block;
import common.block.tech.BlockDispenser;
import common.entity.Entity;
@ -246,9 +245,9 @@ public class Item {
return false;
}
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot) {
public void getModifiers(Map<Attribute, Float> map) {
if(this.block != null)
this.block.getModifiers(map, slot);
this.block.getModifiers(map);
}
public float getRadiation(ItemStack stack) {

View file

@ -6,7 +6,6 @@ import java.util.Map.Entry;
import java.util.Set;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.collect.Lists;
import common.collect.Maps;
import common.enchantment.Enchantment;
@ -14,10 +13,12 @@ import common.enchantment.EnchantmentHelper;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.init.ItemRegistry;
import common.item.material.ItemArmor;
import common.item.weapon.ItemBow;
import common.rng.Random;
import common.tags.TagObject;
import common.util.Color;
import common.util.Equipment;
public final class ItemStack {
public static final int MAX_SIZE = 67108864;
@ -264,9 +265,10 @@ public final class ItemStack {
return this.repairCost;
}
public Map<Attribute, Float> getAttributeModifiers(UsageSlot slot) {
public Map<Attribute, Float> getAttributeModifiers(Equipment slot) {
Map<Attribute, Float> map = Maps.newEnumMap(Attribute.class);
this.item.getModifiers(map, slot);
if(slot == null || (slot.isArmor() ? (this.item instanceof ItemArmor armor && armor.getArmorType() == slot) : !(this.item instanceof ItemArmor)))
this.item.getModifiers(map);
return map;
}

View file

@ -2,7 +2,6 @@ package common.item.consumable;
import java.util.Map;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.entity.npc.EntityNPC;
import common.item.CheatTab;
import common.item.Item;
@ -38,9 +37,8 @@ public class ItemMilkBottle extends Item {
return itemStackIn;
}
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot) {
if(slot == null || slot == UsageSlot.INVENTORY)
map.put(Attribute.RADIATION, -2.0f);
public void getModifiers(Map<Attribute, Float> map) {
map.put(Attribute.RADIATION, -2.0f);
}
@Clientside

View file

@ -0,0 +1,47 @@
package common.item.material;
import java.util.List;
import common.entity.npc.EntityNPC;
import common.init.ToolMaterial;
import common.item.CheatTab;
import common.item.Item;
import common.item.ItemStack;
import common.util.Clientside;
import common.util.Color;
import common.util.Equipment;
public class ItemAnimalArmor extends Item {
private final ToolMaterial material;
@Clientside
private final String texture;
public ItemAnimalArmor(ToolMaterial material, String texture) {
this.material = material;
this.texture = texture;
this.setUnstackable();
this.setTab(CheatTab.ARMOR);
if(this.material.isMagnetic())
this.setMagnetic();
}
public int getArmorValue() {
return this.material.getDamageReduction(Equipment.CHESTPLATE);
}
@Clientside
public String getArmorTexture() {
return this.texture;
}
@Clientside
public boolean hasBuiltinModel() {
return true;
}
@Clientside
public void addInformation(ItemStack stack, EntityNPC playerIn, List<String> tooltip) {
if(this.material.getDamageReduction(Equipment.CHESTPLATE) > 0)
tooltip.add(Color.BLUE + "+" + this.material.getDamageReduction(Equipment.CHESTPLATE) + " Rüstungspunkte");
}
}

View file

@ -5,9 +5,7 @@ import java.util.Map;
import java.util.function.Predicate;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.entity.npc.EntityNPC;
import common.entity.types.EntityLiving;
import common.init.ToolMaterial;
import common.item.CheatTab;
import common.item.Item;
@ -16,7 +14,9 @@ import common.tileentity.TileEntity;
import common.util.BlockPos;
import common.util.BoundingBox;
import common.util.Clientside;
import common.util.Color;
import common.util.Facing;
import common.util.Equipment;
import common.util.Serverside;
import common.util.Vec3;
import common.world.AWorldServer;
@ -24,18 +24,16 @@ import common.world.World;
public class ItemArmor extends Item
{
public final UsageSlot armorType;
public final int damageReduceAmount;
private final ToolMaterial material;
private final Equipment type;
@Clientside
private final String texture;
public ItemArmor(ToolMaterial material, String texture, UsageSlot armorType)
public ItemArmor(ToolMaterial material, String texture, Equipment armorType)
{
this.material = material;
this.texture = texture;
this.armorType = armorType;
this.damageReduceAmount = material.getDamageReduction(armorType);
this.type = armorType;
this.setMaxDamage(material.getDurability(armorType));
this.setTab(CheatTab.ARMOR);
if(this.material.canBeDyed())
@ -51,14 +49,19 @@ public class ItemArmor extends Item
{
return this.material.getArmorEnchantability();
}
public Equipment getArmorType() {
return this.type;
}
/**
* Return the armor material for this armor item.
*/
public ToolMaterial getArmorMaterial()
{
return this.material;
}
public int getArmorValue() {
return this.material.getDamageReduction(this.type);
}
@Clientside
public String getArmorTexture()
@ -66,6 +69,13 @@ public class ItemArmor extends Item
return this.texture;
}
@Clientside
public void addInformation(ItemStack stack, EntityNPC playerIn, List<String> tooltip)
{
if(this.material.getDamageReduction(this.type) > 0)
tooltip.add(Color.BLUE + "+" + this.material.getDamageReduction(this.type) + " Rüstungspunkte");
}
/**
* Return whether this item is repairable in an anvil.
*/
@ -79,13 +89,12 @@ public class ItemArmor extends Item
*/
public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityNPC playerIn)
{
int i = ItemArmor.getArmorPosition(itemStackIn) - 1;
ItemStack itemstack = playerIn.getArmor(i);
ItemStack itemstack = playerIn.getArmor(this.type);
if (itemstack == null)
{
playerIn.setItem(i, itemStackIn.copy());
itemStackIn.setSize(0);
playerIn.setArmor(this.type, itemStackIn.copy());
itemStackIn.decrSize();
}
return itemStackIn;
@ -95,44 +104,17 @@ public class ItemArmor extends Item
// return this.material.canBeDyed();
// }
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot)
public void getModifiers(Map<Attribute, Float> map)
{
if(slot != null && slot != this.armorType)
return;
if(this.material.getRadiationReduction(this.armorType) > 0.0f)
map.put(Attribute.RADIATION_RESISTANCE, this.material.getRadiationReduction(this.armorType));
if(this.material.getMagicReduction(this.armorType) > 0.0f)
map.put(Attribute.MAGIC_RESISTANCE, this.material.getMagicReduction(this.armorType));
if(this.material.getRadiationReduction(this.type) > 0.0f)
map.put(Attribute.RADIATION_RESISTANCE, this.material.getRadiationReduction(this.type));
if(this.material.getMagicReduction(this.type) > 0.0f)
map.put(Attribute.MAGIC_RESISTANCE, this.material.getMagicReduction(this.type));
}
@Clientside
public boolean hasBuiltinModel() {
return true;
}
public static int getArmorPosition(ItemStack stack) {
// if(stack.getItem() != Items.pumpkin && stack.getItem() != Items.skull) {
if(stack.getItem() instanceof ItemArmor) {
switch(((ItemArmor)stack.getItem()).armorType) {
case HEAD:
return 4;
case BODY:
return 3;
case LEGS:
return 2;
case FEET:
return 1;
}
}
return 0;
// }
// else {
// return 4;
// }
return this.type.isArmorRendered();
}
@Serverside
@ -142,21 +124,16 @@ public class ItemArmor extends Item
int j = pos.getY();
int k = pos.getZ();
BoundingBox axisalignedbb = new BoundingBox((double)i, (double)j, (double)k, (double)(i + 1), (double)(j + 1), (double)(k + 1));
List<EntityLiving> list = world.<EntityLiving>getEntitiesWithinAABB(EntityLiving.class, axisalignedbb, new Predicate<EntityLiving>() {
public boolean test(EntityLiving entity) {
return entity.isEntityAlive() && entity instanceof EntityNPC &&
entity.getItem(getArmorPosition(stack)) != null;
List<EntityNPC> list = world.<EntityNPC>getEntitiesWithinAABB(EntityNPC.class, axisalignedbb, new Predicate<EntityNPC>() {
public boolean test(EntityNPC entity) {
return entity.isEntityAlive() && entity.getArmor(ItemArmor.this.type) == null;
}
});
if (list.size() > 0)
{
EntityLiving entitylivingbase = (EntityLiving)list.get(0);
int l = entitylivingbase.isPlayer() ? 1 : 0;
int i1 = getArmorPosition(stack);
ItemStack itemstack = stack.copy(1);
entitylivingbase.setItem(i1 - l, itemstack);
EntityNPC entitylivingbase = list.get(0);
entitylivingbase.setArmor(this.type, stack.copy(1));
stack.decrSize();
return stack;
}

View file

@ -9,7 +9,6 @@ import java.util.Queue;
import java.util.Set;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.block.Block;
import common.block.Material;
import common.block.liquid.BlockDynamicLiquid;
@ -136,8 +135,8 @@ public class ItemBucket extends Item
return this.liquid;
}
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot) {
if(this.liquid == Blocks.flowing_milk && (slot == null || slot == UsageSlot.INVENTORY))
public void getModifiers(Map<Attribute, Float> map) {
if(this.liquid == Blocks.flowing_milk)
map.put(Attribute.RADIATION, -5.0f);
}

View file

@ -1,36 +0,0 @@
package common.item.material;
import common.attributes.UsageSlot;
import common.init.ToolMaterial;
import common.item.CheatTab;
import common.item.Item;
import common.util.Clientside;
public class ItemHorseArmor extends Item {
private final ToolMaterial material;
@Clientside
private final String texture;
public ItemHorseArmor(ToolMaterial material, String texture) {
this.material = material;
this.texture = texture;
this.setUnstackable();
this.setTab(CheatTab.ARMOR);
if(this.material.isMagnetic())
this.setMagnetic();
}
public int getArmorValue() {
return this.material.getDamageReduction(UsageSlot.BODY);
}
@Clientside
public String getArmorTexture() {
return this.texture;
}
@Clientside
public boolean hasBuiltinModel() {
return true;
}
}

View file

@ -3,7 +3,6 @@ package common.item.material;
import java.util.List;
import java.util.Map;
import common.attributes.Attribute;
import common.attributes.UsageSlot;
import common.entity.npc.EntityNPC;
import common.init.MetalType;
import common.item.Item;
@ -37,9 +36,9 @@ public class ItemMetal extends Item {
// return this.metal.radioactivity > 0.0f ? ChatFormat.GREEN : super.getColor(stack);
// }
public void getModifiers(Map<Attribute, Float> map, UsageSlot slot)
public void getModifiers(Map<Attribute, Float> map)
{
if((slot == null || slot == UsageSlot.INVENTORY) && this.metal.radioactivity > 0.0f)
if(this.metal.radioactivity > 0.0f)
map.put(Attribute.RADIATION, this.metal.radioactivity * 4.0f);
}

View file

@ -15,14 +15,14 @@ import common.item.WieldType;
import common.util.BlockPos;
import common.util.Clientside;
import common.util.Color;
import common.util.HarvestTool;
import common.util.Equipment;
import common.world.World;
public class ItemTool extends Item {
private final ToolMaterial material;
private final HarvestTool type;
private final Equipment type;
public ItemTool(ToolMaterial material, HarvestTool type) {
public ItemTool(ToolMaterial material, Equipment type) {
this.material = material;
this.type = type;
this.setMaxDamage(material.getDurability());
@ -36,14 +36,10 @@ public class ItemTool extends Item {
{
if(this.type.isLevelled())
tooltip.add(Color.VIOLET + "Level " + (this.getToolMaterial().getHarvestLevel() + 1));
tooltip.add(Color.DARK_GREEN + "+ " + (this.material.getEfficiency() - 1) + " Abbaueffizienz");
tooltip.add(Color.DARK_GREEN + "+" + (this.material.getEfficiency() - 1) + " Abbaueffizienz");
int damage = this.getAttackDamageBonus(stack);
if(damage != 0) {
if(damage > 0)
tooltip.add(Color.BLUE + String.format("+%d Angriffsschaden", damage));
else
tooltip.add(Color.RED + String.format("-%d Angriffsschaden", damage));
}
if(damage > 0)
tooltip.add(Color.BLUE + "+" + damage + " Angriffsschaden");
}
public int getAttackDamageBonus(ItemStack stack) {
@ -65,7 +61,7 @@ public class ItemTool extends Item {
return this.material;
}
public HarvestTool getToolType() {
public Equipment getToolType() {
return this.type;
}

View file

@ -0,0 +1,147 @@
package common.util;
import common.enchantment.EnchantmentType;
import common.init.ToolMaterial;
public enum Equipment implements Identifyable, Displayable {
PICKAXE("pickaxe", "Spitzhacke", ItemType.LEVELLED, 2, "XXX", " # ", " # "),
AXE("axe", "Axt", ItemType.TOOL, 3, "XX", "X#", " #"),
SHOVEL("shovel", "Schaufel", ItemType.TOOL, 1, "X", "#", "#"),
SHEARS("shears", "Schere", ItemType.OPTIONAL, " X", "X "),
SWORD("sword", "Schwert", ItemType.MELEE, 4, "X", "X", "#"),
HELMET("helmet", "Helm", "Kappe", 11, 0, EnchantmentType.ARMOR_HEAD, 1.0f, 1.0f, "XXX", "X X"),
CHESTPLATE("chestplate", "Brustpanzer", "Jacke", 16, 1, EnchantmentType.ARMOR_TORSO, 1.7f, 1.2f, "X X", "XXX", "XXX"),
LEGGINGS("leggings", "Beinschutz", "Hose", 15, 2, EnchantmentType.ARMOR_LEGS, 1.6f, 1.1f, "XXX", "X X", "X X"),
BOOTS("boots", "Stiefel", "Stiefel", 13, 3, EnchantmentType.ARMOR_FEET, 1.4f, 1.0f, "X X", "X X"),
HORSE_ARMOR("horse_armor", "Pferderüstung", ItemType.ANIMAL, 16, "X X", "XXX", "XXX");
public static final int ARMOR_SLOTS;
public static final Equipment[] ARMOR;
private final String name;
private final String display;
private final String altDisplay;
private final String[] recipe;
private final ItemType type;
private final int damage;
private final int index;
private final float phyResist;
private final float magicResist;
private final EnchantmentType enchType;
static {
int slots = 0;
for(Equipment slot : values()) {
if(slot.index >= 0)
++slots;
}
ARMOR_SLOTS = slots;
ARMOR = new Equipment[slots];
for(Equipment slot : values()) {
if(slot.index >= 0)
ARMOR[slot.index] = slot;
}
}
private Equipment(String name, String display, String altDisplay, ItemType type, int damage, int index, EnchantmentType ench, float phy, float mag, String ... recipe) {
this.name = name;
this.display = display;
this.altDisplay = altDisplay;
this.type = type;
this.damage = damage;
this.recipe = recipe;
this.index = index;
this.phyResist = phy;
this.magicResist = mag;
this.enchType = ench;
}
private Equipment(String name, String display, ItemType type, int damage, String ... recipe) {
this(name, display, null, type, damage, -1, null, 0.0f, 0.0f, recipe);
}
private Equipment(String name, String display, ItemType type, String ... recipe) {
this(name, display, type, -1, recipe);
}
private Equipment(String name, String display, String altDisplay, int damage, int index, EnchantmentType ench, float rad, float mag, String ... recipe) {
this(name, display, altDisplay, ItemType.ARMOR, damage, index, ench, rad, mag, recipe);
}
private Equipment(String name, String display, int damage, int index, EnchantmentType ench, float rad, float mag, String ... recipe) {
this(name, display, null, ItemType.AUX, damage, index, ench, rad, mag, recipe);
}
public String toString() {
return this.name;
}
public String getName() {
return this.name;
}
public String getDisplay() {
return this.display;
}
public String getDisplay(String prefix, boolean alt) {
String display = alt && this.altDisplay != null ? this.altDisplay : this.display;
return prefix == null ? display : prefix + display.toLowerCase();
}
public boolean canRegister(ToolMaterial material) {
return this.isArmor() ? material.hasArmor() && (!this.isAnimalArmor() || material.hasExtras()) : (this.isMelee() ? material.hasWeapons() : (this.isOptional() ? material.hasExtras() : material.hasTools()));
}
public ItemType getType() {
return this.type;
}
public boolean isLevelled() {
return this.type == ItemType.LEVELLED;
}
public boolean isMelee() {
return this.type == ItemType.MELEE;
}
public boolean isOptional() {
return this.type == ItemType.OPTIONAL;
}
public boolean isArmor() {
return this.type == ItemType.ARMOR || this.type == ItemType.AUX || this.type == ItemType.ANIMAL;
}
public boolean isArmorRendered() {
return this.type == ItemType.ARMOR || this.type == ItemType.ANIMAL;
}
public boolean isAnimalArmor() {
return this.type == ItemType.ANIMAL;
}
public int getDamage() {
return this.damage;
}
public String[] getRecipe() {
return this.recipe;
}
public int getIndex() {
return this.index;
}
public float getPhysicalResistance() {
return this.phyResist;
}
public float getMagicalResistance() {
return this.magicResist;
}
public EnchantmentType getEnchantmentType() {
return this.enchType;
}
}

View file

@ -1,53 +0,0 @@
package common.util;
public enum HarvestTool implements Displayable {
PICKAXE("Spitzhacke", true, 2),
AXE("Axt", 3),
SHOVEL("Schaufel", 1),
SHEARS("Schere"),
SWORD("Schwert", 4, true);
private final String display;
private final boolean levelled;
private final boolean melee;
private final int damage;
private HarvestTool(String display, boolean levelled, int damage, boolean melee) {
this.display = display;
this.levelled = levelled;
this.damage = damage;
this.melee = melee;
}
private HarvestTool(String display, boolean levelled, int damage) {
this(display, levelled, damage, false);
}
private HarvestTool(String display, int damage, boolean melee) {
this(display, false, damage, melee);
}
private HarvestTool(String display, int damage) {
this(display, false, damage, false);
}
private HarvestTool(String display) {
this(display, false, -1, false);
}
public String getDisplay() {
return this.display;
}
public boolean isLevelled() {
return this.levelled;
}
public boolean isMelee() {
return this.melee;
}
public int getDamage() {
return this.damage;
}
}

View file

@ -0,0 +1,5 @@
package common.util;
public enum ItemType {
TOOL, LEVELLED, OPTIONAL, MELEE, ARMOR, AUX, ANIMAL;
}