use of net.silentchaos512.gems.item.tool.ItemGemAxe in project SilentGems by SilentChaos512.
the class SkillLumberjack method breakTree.
private static void breakTree(TreeBreakResult result, World world, int x, int y, int z, int xStart, int yStart, int zStart, ItemStack tool, IBlockState state, EntityPlayer player) {
ItemGemAxe axe = (ItemGemAxe) tool.getItem();
Block block = state.getBlock();
BlockPos pos = new BlockPos(x, y, z);
Block localBlock;
IBlockState localState;
BlockPos localPos;
int meta = block.getMetaFromState(state);
int localMeta;
for (int xPos = x - 1; xPos <= x + 1; ++xPos) {
for (int yPos = y; yPos <= y + 1; ++yPos) {
for (int zPos = z - 1; zPos <= z + 1; ++zPos) {
localPos = new BlockPos(xPos, yPos, zPos);
localState = world.getBlockState(localPos);
localBlock = localState.getBlock();
if (block == localBlock) {
int harvestLevel = localBlock.getHarvestLevel(localState);
float localHardness = localBlock == null ? Float.MAX_VALUE : localState.getBlockHardness(world, localPos);
if (harvestLevel <= axe.getHarvestLevel(tool, "axe", player, localState) && localHardness >= 0) {
boolean cancel = false;
// Block break event
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(world, localPos, localState, player);
// event.setCanceled(cancel);
MinecraftForge.EVENT_BUS.post(event);
cancel = event.isCanceled();
int xDist = xPos - xStart;
int yDist = yPos - yStart;
int zDist = zPos - zStart;
if (9 * xDist * xDist + yDist * yDist + 9 * zDist * zDist < 2500) {
if (cancel) {
breakTree(result, world, xPos, yPos, zPos, xStart, yStart, zStart, tool, state, player);
} else {
localMeta = localBlock.getMetaFromState(localState);
if (localBlock == block && localMeta % 4 == meta % 4) {
if (!player.capabilities.isCreativeMode) {
localBlock.harvestBlock(world, player, pos, state, world.getTileEntity(pos), tool);
axe.onBlockDestroyed(tool, world, localState, localPos, player);
++result.blocksBroken;
if (result.soul != null)
result.xpEarned += result.soul.getXpForBlockHarvest(world, localPos, localState);
}
world.setBlockToAir(localPos);
if (!world.isRemote) {
breakTree(result, world, xPos, yPos, zPos, xStart, yStart, zStart, tool, state, player);
}
}
}
}
}
}
}
}
}
}
use of net.silentchaos512.gems.item.tool.ItemGemAxe in project SilentGems by SilentChaos512.
the class ToolRenderHelper method clAddInformation.
@Override
public void clAddInformation(ItemStack tool, World world, List list, boolean advanced) {
LocalizationHelper loc = SilentGems.instance.localizationHelper;
boolean controlDown = KeyTracker.isControlDown();
boolean altDown = KeyTracker.isAltDown();
boolean shiftDown = KeyTracker.isShiftDown();
String line;
// Tipped upgrade
ToolPartTip partTip = (ToolPartTip) ToolHelper.getConstructionTip(tool);
if (partTip != null) {
String tipName = partTip.getUnlocalizedName().replaceFirst("[^:]+:", "");
tipName = loc.getMiscText("Tooltip." + tipName);
line = loc.getMiscText("Tooltip.Tipped", tipName);
list.add(line);
}
// UUID
if (GemsConfig.DEBUG_MODE && controlDown && shiftDown) {
UUID uuid = ToolHelper.hasUUID(tool) ? ToolHelper.getUUID(tool) : null;
list.add(uuid == null ? "No UUID" : uuid.toString());
uuid = ToolHelper.getSoulUUID(tool);
list.add(uuid == null ? "No Soul UUID" : uuid.toString());
}
// Tool Soul
ToolSoul soul = SoulManager.getSoul(tool);
if (soul != null) {
soul.addInformation(tool, world, list, advanced);
}
// Show original owner?
if (controlDown) {
String owner = ToolHelper.getOriginalOwner(tool);
if (owner.equals(SilentGems.localizationHelper.getMiscText("Tooltip.OriginalOwner.Creative")))
owner = TextFormatting.LIGHT_PURPLE + owner;
if (!owner.isEmpty())
list.add(loc.getMiscText("Tooltip.OriginalOwner", owner));
else
list.add(loc.getMiscText("Tooltip.OriginalOwner.Unknown"));
}
if (controlDown && tool.getTagCompound().getBoolean(ToolHelper.NBT_LOCK_STATS)) {
list.add(loc.getMiscText("Tooltip.LockedStats"));
}
// Example tool?
if (tool.hasTagCompound() && tool.getTagCompound().hasKey(ToolHelper.NBT_EXAMPLE_TOOL_TIER)) {
EnumMaterialTier tier = EnumMaterialTier.values()[tool.getTagCompound().getInteger(ToolHelper.NBT_EXAMPLE_TOOL_TIER)];
list.add(loc.getMiscText("Tooltip.ExampleTool", tier));
} else // Missing data?
if (ToolHelper.hasNoConstruction(tool)) {
list.add(loc.getMiscText("Tooltip.NoData1"));
list.add(loc.getMiscText("Tooltip.NoData2"));
} else // Broken?
if (ToolHelper.isBroken(tool)) {
line = loc.getMiscText("Tooltip.Broken");
list.add(line);
}
final Item item = tool.getItem();
final boolean isSword = item instanceof ItemGemSword;
final boolean isAxe = item instanceof ItemGemAxe;
final boolean isWeapon = isSword || isAxe;
final boolean isCaster = isSword && ToolHelper.getToolTier(tool).ordinal() >= EnumMaterialTier.SUPER.ordinal();
final boolean isBow = item instanceof ItemGemBow;
final boolean isDigger = item instanceof ItemTool;
final boolean isShield = item instanceof ItemGemShield;
final String sep = loc.getMiscText("Tooltip.Separator");
if (controlDown) {
// Properties Header
line = loc.getMiscText("Tooltip.Properties");
list.add(line);
TextFormatting color = TextFormatting.YELLOW;
// Tier
EnumMaterialTier tier = ToolHelper.getToolTier(tool);
line = TextFormatting.RESET + loc.getMiscText("ToolTier." + tier);
list.add(" " + color + loc.getMiscText("ToolTier", line));
int durabilityMax = tool.getMaxDamage();
int durability = durabilityMax - tool.getItemDamage();
String s1 = String.format(durability > 9999 ? "%,d" : "%d", durability);
String s2 = String.format(durabilityMax > 9999 ? "%,d" : "%d", durabilityMax);
float durabilityBoost = ToolSoul.getDurabilityModifierForDisplay(soul);
String durBoostLine = durabilityBoost == 0f ? "" : " (" + TooltipHelper.numberToPercent(durabilityBoost, 0, true) + TextFormatting.RESET + ")";
line = loc.getMiscText("Tooltip.Durability", s1 + " / " + s2 + durBoostLine);
list.add(color + " " + line);
if (isShield) {
float magicProtection = (int) (ToolHelper.getMagicProtection(tool) * 100);
list.add(color + getTooltipLine("MagicProtection", magicProtection, 0f));
}
if (isDigger) {
// @formatter:off
int harvestLevel = ToolHelper.getHarvestLevel(tool);
String str = color + getTooltipLine("HarvestLevel", harvestLevel, 0f);
String key = "Tooltip.level" + harvestLevel;
String val = SilentGems.localizationHelper.getMiscText(key);
if (!val.equals("misc.silentgems:" + key))
str += " (" + val + ")";
list.add(str);
float harvestSpeedModifier = ToolSoul.getHarvestSpeedModifierForDisplay(soul);
list.add(color + getTooltipLine("HarvestSpeed", ToolHelper.getDigSpeedOnProperMaterial(tool), harvestSpeedModifier));
}
if (isWeapon) {
float meleeSpeed = 4 + ToolHelper.getMeleeSpeedModifier(tool);
list.add(color + getTooltipLine("MeleeSpeed", meleeSpeed, 0f).replaceFirst("%", ""));
float meleeDamage = 1 + ToolHelper.getMeleeDamageModifier(tool);
float meleeModifier = ToolSoul.getMeleeDamageModifierForDisplay(soul);
list.add(color + getTooltipLine("MeleeDamage", meleeDamage, meleeModifier));
if (isCaster) {
EnumMagicType magicType = EnumMagicType.getMagicType(tool);
float damagePerShot = magicType.getDamagePerShot(tool);
String damageString = damagePerShot == (int) damagePerShot ? Integer.toString((int) damagePerShot) : String.format(TooltipHelper.FORMAT_FLOAT, damagePerShot);
String str = damageString + "" + TextFormatting.DARK_GRAY + "x" + magicType.getShotCount(tool);
float magicModifier = ToolSoul.getMagicDamageModifierForDisplay(soul);
list.add(color + getTooltipLine("MagicDamage", str, magicModifier));
}
}
if (isBow) {
ToolStats statsNoSoul = ToolHelper.getStats(tool, false);
float drawSpeed = ModItems.bow.getDrawSpeedForDisplay(tool);
float drawSpeedPreSoul = ItemGemBow.getDrawSpeedForDisplay(statsNoSoul.meleeSpeed, statsNoSoul.harvestSpeed);
float drawSpeedBoost = (drawSpeed - drawSpeedPreSoul) / drawSpeedPreSoul;
list.add(color + getTooltipLine("DrawSpeed", drawSpeed, drawSpeedBoost));
float arrowDamage = ModItems.bow.getArrowDamageForDisplay(tool);
float arrowDamagePreSoul = ItemGemBow.getArrowDamageForDisplay(statsNoSoul.meleeDamage);
float arrowDamageBoost = (arrowDamage - arrowDamagePreSoul) / arrowDamagePreSoul;
list.add(color + getTooltipLine("ArrowDamage", arrowDamage, arrowDamageBoost));
}
list.add(color + getTooltipLine("ChargeSpeed", ToolHelper.getChargeSpeed(tool), 0f));
} else {
list.add(TextFormatting.GOLD + loc.getMiscText("Tooltip.CtrlForProp"));
}
if (altDown) {
// Statistics Header
list.add(sep);
line = loc.getMiscText("Tooltip.Statistics");
list.add(line);
list.add(getTooltipLine("BlocksMined", ToolHelper.getStatBlocksMined(tool), 0f));
if (isDigger) {
list.add(getTooltipLine("BlocksPlaced", ToolHelper.getStatBlocksPlaced(tool), 0f));
}
if (item instanceof ItemGemShovel) {
list.add(getTooltipLine("PathsMade", ToolHelper.getStatPathsMade(tool), 0f));
}
if (item instanceof ItemGemHoe) {
list.add(getTooltipLine("BlocksTilled", ToolHelper.getStatBlocksTilled(tool), 0f));
}
list.add(getTooltipLine("HitsLanded", ToolHelper.getStatHitsLanded(tool), 0f));
if (isCaster || isBow)
list.add(getTooltipLine("ShotsFired", ToolHelper.getStatShotsFired(tool), 0f));
if (item instanceof ItemGemTomahawk)
list.add(getTooltipLine("ThrownCount", ToolHelper.getStatThrownCount(tool), 0f));
if (isWeapon)
list.add(getTooltipLine("KillCount", ToolHelper.getStatKillCount(tool), 0f));
list.add(getTooltipLine("Redecorated", ToolHelper.getStatRedecorated(tool), 0f));
list.add(sep);
line = loc.getMiscText("Tooltip.Construction");
list.add(line);
ToolPart[] parts = ToolHelper.getConstructionParts(tool);
EnumMaterialGrade[] grades = ToolHelper.getConstructionGrades(tool);
for (int i = 0; i < parts.length; ++i) {
ToolPart part = parts[i];
EnumMaterialGrade grade = grades[i];
line = " " + TextFormatting.YELLOW + part.getKey() + TextFormatting.GOLD + " (" + grade + ")";
list.add(line);
}
ToolPart partRod = ToolHelper.getConstructionRod(tool);
if (partRod != null) {
list.add(" " + TextFormatting.YELLOW + partRod.getKey());
}
list.add(sep);
} else {
list.add(TextFormatting.GOLD + loc.getMiscText("Tooltip.AltForStat"));
}
// Debug render layers
if (controlDown && shiftDown && tool.hasTagCompound()) {
if (!altDown)
list.add(sep);
list.add("Render Layers");
IModelData modelData = getModelCache(tool);
if (modelData != null) {
for (ToolPartPosition pos : ToolPartPosition.values()) {
String key = "Layer" + pos.ordinal();
String str = " %s: %s, %X";
ToolPart renderPart = ToolHelper.getRenderPart(tool, pos);
ModelResourceLocation model = renderPart == null ? null : renderPart.getModel(tool, pos, 0);
str = String.format(str, pos.name(), model == null ? "null" : model.toString(), modelData.getColor(pos, 0));
list.add(str);
}
}
}
}
Aggregations