2020-05-20 15:41:55 +02:00
|
|
|
package de.ellpeck.naturesaura.items;
|
|
|
|
|
|
|
|
import de.ellpeck.naturesaura.NaturesAura;
|
2021-12-15 16:24:53 +01:00
|
|
|
import net.minecraft.ChatFormatting;
|
|
|
|
import net.minecraft.network.chat.Component;
|
|
|
|
import net.minecraft.network.chat.MutableComponent;
|
|
|
|
import net.minecraft.network.chat.Style;
|
|
|
|
import net.minecraft.world.item.ElytraItem;
|
2020-05-22 12:26:35 +02:00
|
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
|
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
2020-05-20 15:41:55 +02:00
|
|
|
import net.minecraftforge.common.MinecraftForge;
|
|
|
|
import net.minecraftforge.event.AnvilUpdateEvent;
|
|
|
|
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
|
|
|
|
import net.minecraftforge.event.entity.player.PlayerEvent;
|
|
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
|
|
|
|
|
|
public class ItemBreakPrevention extends ItemImpl {
|
2021-12-15 16:24:53 +01:00
|
|
|
|
2020-05-20 15:41:55 +02:00
|
|
|
public ItemBreakPrevention() {
|
|
|
|
super("break_prevention");
|
|
|
|
MinecraftForge.EVENT_BUS.register(new Events());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static class Events {
|
2021-12-15 16:24:53 +01:00
|
|
|
|
2020-05-20 15:41:55 +02:00
|
|
|
@SubscribeEvent
|
|
|
|
public void onAnvilUpdate(AnvilUpdateEvent event) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var stack = event.getLeft();
|
2021-12-15 16:24:53 +01:00
|
|
|
if (!stack.isDamageableItem())
|
2020-05-20 15:41:55 +02:00
|
|
|
return;
|
2021-12-15 16:30:22 +01:00
|
|
|
var second = event.getRight();
|
2020-05-20 15:41:55 +02:00
|
|
|
if (second.getItem() != ModItems.BREAK_PREVENTION)
|
|
|
|
return;
|
2021-12-15 16:30:22 +01:00
|
|
|
var output = stack.copy();
|
2020-05-20 15:41:55 +02:00
|
|
|
output.getOrCreateTag().putBoolean(NaturesAura.MOD_ID + ":break_prevention", true);
|
|
|
|
event.setOutput(output);
|
|
|
|
event.setMaterialCost(1);
|
|
|
|
event.setCost(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
|
|
|
public void onBreakSpeed(PlayerEvent.BreakSpeed event) {
|
2022-08-01 16:14:37 +02:00
|
|
|
var player = event.getEntity();
|
2020-05-20 15:41:55 +02:00
|
|
|
if (player == null)
|
|
|
|
return;
|
2021-12-15 16:30:22 +01:00
|
|
|
var stack = player.getMainHandItem();
|
2020-05-20 15:41:55 +02:00
|
|
|
if (!stack.hasTag() || !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":break_prevention"))
|
|
|
|
return;
|
2021-12-15 16:24:53 +01:00
|
|
|
if (ElytraItem.isFlyEnabled(stack))
|
2020-05-20 15:41:55 +02:00
|
|
|
return;
|
|
|
|
event.setNewSpeed(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
@SubscribeEvent
|
2020-05-22 12:26:35 +02:00
|
|
|
@OnlyIn(Dist.CLIENT)
|
2020-05-20 15:41:55 +02:00
|
|
|
public void onTooltip(ItemTooltipEvent event) {
|
2021-12-15 16:30:22 +01:00
|
|
|
var stack = event.getItemStack();
|
2020-05-20 15:41:55 +02:00
|
|
|
if (!stack.hasTag() || !stack.getTag().getBoolean(NaturesAura.MOD_ID + ":break_prevention"))
|
|
|
|
return;
|
2021-12-15 16:30:22 +01:00
|
|
|
var tooltip = event.getToolTip();
|
2022-06-27 15:24:04 +02:00
|
|
|
tooltip.add(Component.translatable("info." + NaturesAura.MOD_ID + ".break_prevention").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GRAY)));
|
2021-12-15 16:24:53 +01:00
|
|
|
if (ElytraItem.isFlyEnabled(stack))
|
2020-05-20 15:41:55 +02:00
|
|
|
return;
|
|
|
|
if (tooltip.size() < 1)
|
|
|
|
return;
|
2021-12-15 16:30:22 +01:00
|
|
|
var head = tooltip.get(0);
|
2021-12-15 16:24:53 +01:00
|
|
|
if (head instanceof MutableComponent)
|
2022-06-27 15:24:04 +02:00
|
|
|
((MutableComponent) head).append(Component.translatable("info." + NaturesAura.MOD_ID + ".broken").setStyle(Style.EMPTY.applyFormat(ChatFormatting.GRAY)));
|
2020-05-20 15:41:55 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|