use of gregtech.api.items.toolitem.ToolMetaItem.MetaToolValueItem in project GregTech by GregTechCE.
the class ToolMetaItemListener method onAnvilChange.
@SubscribeEvent
public static void onAnvilChange(AnvilUpdateEvent event) {
ItemStack firstStack = event.getLeft();
ItemStack secondStack = event.getRight();
if (!firstStack.isEmpty() && !secondStack.isEmpty() && firstStack.getItem() instanceof ToolMetaItem) {
ToolMetaItem<?> toolMetaItem = (ToolMetaItem<?>) firstStack.getItem();
MetaToolValueItem toolValueItem = toolMetaItem.getItem(firstStack);
if (toolValueItem == null) {
return;
}
SolidMaterial toolMaterial = ToolMetaItem.getToolMaterial(firstStack);
OrePrefix solidPrefix = getSolidPrefix(toolMaterial);
UnificationEntry unificationEntry = OreDictUnifier.getUnificationEntry(secondStack);
double toolDamage = toolMetaItem.getItemDamage(firstStack) / (toolMetaItem.getMaxItemDamage(firstStack) * 1.0);
double materialForFullRepair = toolValueItem.getAmountOfMaterialToRepair(firstStack);
int durabilityPerUnit = (int) Math.ceil(toolMetaItem.getMaxItemDamage(firstStack) / materialForFullRepair);
int materialUnitsRequired = Math.min(secondStack.getCount(), (int) Math.ceil(toolDamage * materialForFullRepair));
int repairCost = (MathHelper.clamp(toolMaterial.harvestLevel, 2, 3) - 1) * materialUnitsRequired;
if (toolDamage > 0.0 && materialUnitsRequired > 0 && unificationEntry != null && unificationEntry.material == toolMaterial && unificationEntry.orePrefix == solidPrefix) {
int durabilityToRegain = durabilityPerUnit * materialUnitsRequired;
ItemStack resultStack = firstStack.copy();
toolMetaItem.regainItemDurability(resultStack, durabilityToRegain);
event.setMaterialCost(materialUnitsRequired);
event.setCost(repairCost);
event.setOutput(resultStack);
}
}
}
use of gregtech.api.items.toolitem.ToolMetaItem.MetaToolValueItem in project GregTech by GregTechCE.
the class CommandHand method execute.
@Override
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
if (sender instanceof EntityPlayerMP) {
EntityPlayerMP player = (EntityPlayerMP) sender;
ItemStack stackInHand = player.inventory.getCurrentItem();
if (stackInHand.isEmpty()) {
throw new CommandException("gregtech.command.util.hand.no_item");
}
String registryName = stackInHand.getItem().getRegistryName().toString();
ClickEvent itemNameEvent = new ClickEvent(Action.OPEN_URL, registryName);
player.sendMessage(new TextComponentTranslation("gregtech.command.util.hand.item_id", registryName, stackInHand.getItemDamage()).setStyle(new Style().setClickEvent(itemNameEvent)));
IElectricItem electricItem = stackInHand.getCapability(GregtechCapabilities.CAPABILITY_ELECTRIC_ITEM, null);
IFluidHandlerItem fluidHandlerItem = stackInHand.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null);
if (electricItem != null) {
player.sendMessage(new TextComponentTranslation("gregtech.command.util.hand.electric", electricItem.getCharge(), electricItem.getMaxCharge(), electricItem.getTier(), Boolean.toString(electricItem.canProvideChargeExternally())));
}
if (fluidHandlerItem != null) {
for (IFluidTankProperties properties : fluidHandlerItem.getTankProperties()) {
FluidStack contents = properties.getContents();
String fluidName = contents == null ? "empty" : contents.getFluid().getName();
ClickEvent fluidClickEvent = new ClickEvent(Action.OPEN_URL, fluidName);
player.sendMessage(new TextComponentTranslation("gregtech.command.util.hand.fluid", fluidName, contents == null ? 0 : contents.amount, properties.getCapacity(), Boolean.toString(properties.canFill()), Boolean.toString(properties.canDrain())).setStyle(new Style().setClickEvent(fluidClickEvent)));
}
}
if (stackInHand.getItem() instanceof MetaItem) {
MetaItem<?> metaItem = (MetaItem<?>) stackInHand.getItem();
MetaValueItem metaValueItem = metaItem.getItem(stackInHand);
if (metaValueItem == null) {
if (metaItem instanceof MaterialMetaItem) {
Material material = ((MaterialMetaItem) metaItem).getMaterial(stackInHand);
OrePrefix orePrefix = ((MaterialMetaItem) metaItem).getOrePrefix(stackInHand);
String oreDictName = new UnificationEntry(orePrefix, material).toString();
player.sendMessage(new TextComponentTranslation("gregtech.command.util.hand.material_meta_item", orePrefix, material).setStyle(new Style().setClickEvent(new ClickEvent(Action.OPEN_URL, oreDictName))));
}
} else {
if (metaValueItem instanceof ToolMetaItem.MetaToolValueItem) {
IToolStats toolStats = ((MetaToolValueItem) metaValueItem).getToolStats();
player.sendMessage(new TextComponentTranslation("gregtech.command.util.hand.tool_stats", toolStats.getClass().getName()));
}
ClipboardUtil.copyToClipboard(player, metaValueItem.unlocalizedName);
ClickEvent metaItemEvent = new ClickEvent(Action.OPEN_URL, metaValueItem.unlocalizedName);
player.sendMessage(new TextComponentTranslation("gregtech.command.util.hand.meta_item", metaValueItem.unlocalizedName, metaValueItem).setStyle(new Style().setClickEvent(metaItemEvent)));
}
}
} else {
throw new CommandException("gregtech.command.util.hand.not_a_player");
}
}
use of gregtech.api.items.toolitem.ToolMetaItem.MetaToolValueItem in project GregTech by GregTechCE.
the class TreeChopTask method run.
@Override
public boolean run() {
ItemStack itemInMainHand = this.player.getHeldItemMainhand();
boolean isPlayerNear = player.world == world && currentPos.distanceSq(player.posX, currentPos.getY(), player.posZ) <= 1024;
boolean isPlayerConnected = player.connection.netManager.isChannelOpen() && isPlayerNear;
if (!isPlayerConnected || itemInMainHand.isEmpty() || !isItemEqual(itemInMainHand)) {
return false;
}
ToolMetaItem<?> toolMetaItem = (ToolMetaItem<?>) itemStack.getItem();
MetaToolValueItem toolValueItem = toolMetaItem.getItem(itemStack);
if (toolValueItem == null) {
return false;
}
IToolStats toolStats = toolValueItem.getToolStats();
int damagePerBlockBreak = toolStats.getToolDamagePerBlockBreak(itemStack);
if (!finishedSearchingBlocks) {
this.finishedSearchingBlocks = !attemptSearchWoodBlocks() || this.visitedBlockPos.size() >= MAX_BLOCKS_TO_SEARCH;
if (finishedSearchingBlocks) {
this.woodBlockPos.sort(new WoodBlockComparator());
}
return true;
}
if (toolMetaItem.isUsable(itemInMainHand, damagePerBlockBreak) && tryBreakAny()) {
toolMetaItem.damageItem(itemInMainHand, damagePerBlockBreak, false);
return true;
}
return false;
}
Aggregations