Skip to content
Merged
Original file line number Diff line number Diff line change
@@ -1,25 +1,37 @@
package com.gregtechceu.gtceu.common.item.tool.behavior;

import com.gregtechceu.gtceu.GTCEu;
import com.gregtechceu.gtceu.api.GTValues;
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior;
import com.gregtechceu.gtceu.common.data.GTSoundEntries;
import com.gregtechceu.gtceu.common.data.item.GTToolActions;
import com.gregtechceu.gtceu.data.recipe.CustomTags;

import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.context.UseOnContext;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.BlockHitResult;
import net.minecraftforge.common.ToolAction;

import lombok.Getter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;
import java.util.Set;

import static com.gregtechceu.gtceu.api.item.tool.ToolHelper.getBehaviorsTag;

Expand Down Expand Up @@ -49,13 +61,40 @@ public void addBehaviorNBT(@NotNull ItemStack stack, @NotNull CompoundTag tag) {
IToolBehavior.super.addBehaviorNBT(stack, tag);
}

@Override
public @NotNull InteractionResult onItemUse(UseOnContext context) {
Level world = context.getLevel();
BlockHitResult blockHitResult = context.getHitResult();
Player player = context.getPlayer();
ItemStack itemStack = context.getItemInHand();
BlockState state = world.getBlockState(blockHitResult.getBlockPos());
BlockPos pos = blockHitResult.getBlockPos();
Set<GTToolType> toolTypes = ToolHelper.getToolTypes(itemStack);
// Copied and adapted from
// https://github.com/Creators-of-Create/Create/blob/mc1.20.1/dev/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItem.java
if (toolTypes.contains(GTToolType.WRENCH) && GTCEu.Mods.isCreateLoaded() &&
state.is(CustomTags.CREATE_WRENCH_PICKUP)) {
if (!(world instanceof ServerLevel serverLevel))
return InteractionResult.SUCCESS;
if (player != null && !player.isCreative())
Block.getDrops(state, serverLevel, pos, world.getBlockEntity(pos), player, itemStack)
.forEach(stack -> player.getInventory().placeItemBackInInventory(stack));
state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, true);
world.destroyBlock(pos, false);
GTSoundEntries.WRENCH_TOOL.playOnServer(serverLevel, pos, 1, GTValues.RNG.nextFloat() * .5f + .5f);
return InteractionResult.SUCCESS;
}

if (player != null) world.getBlockState(pos).use(world, player, context.getHand(), blockHitResult);
return InteractionResult.SUCCESS;
}

@Override
public @NotNull InteractionResultHolder<ItemStack> onItemRightClick(@NotNull Level world, @NotNull Player player,
@NotNull InteractionHand hand) {
var itemStack = player.getItemInHand(hand);
var tagCompound = getBehaviorsTag(itemStack);
if (player.isShiftKeyDown()) {

var toolTypes = ToolHelper.getToolTypes(itemStack);
if (toolTypes.contains(GTToolType.WRENCH)) {
tagCompound.putByte("Mode",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import com.gregtechceu.gtceu.api.data.tag.TagUtil;

import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.TagKey;
import net.minecraft.world.entity.EntityType;
Expand Down Expand Up @@ -200,6 +202,8 @@ public class CustomTags {
public static final TagKey<Block> CLEANROOM_FLOORS = TagUtil.createModBlockTag("cleanroom_floors");
public static final TagKey<Block> CHARCOAL_PILE_IGNITER_WALLS = TagUtil.createModBlockTag(
"charcoal_pile_igniter_walls");
public static final TagKey<Block> CREATE_WRENCH_PICKUP = TagUtil.optionalTag(BuiltInRegistries.BLOCK,
new ResourceLocation("create", "wrench_pickup"));

public static final TagKey<Biome> IS_SWAMP = TagUtil.createTag(Registries.BIOME, "is_swamp", false);
public static final TagKey<Biome> IS_SANDY = TagUtil.createModTag(Registries.BIOME, "is_sandy");
Expand Down
Loading