Skip to content

Commit 2d971f1

Browse files
Wrench improvements (#3690)
Co-authored-by: Ghostipedia / Caitlynn <46772882+Ghostipedia@users.noreply.github.com>
1 parent 1de5e75 commit 2d971f1

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

src/main/java/com/gregtechceu/gtceu/common/item/tool/behavior/ToolModeSwitchBehavior.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,37 @@
11
package com.gregtechceu.gtceu.common.item.tool.behavior;
22

3+
import com.gregtechceu.gtceu.GTCEu;
4+
import com.gregtechceu.gtceu.api.GTValues;
35
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
46
import com.gregtechceu.gtceu.api.item.tool.ToolHelper;
57
import com.gregtechceu.gtceu.api.item.tool.behavior.IToolBehavior;
8+
import com.gregtechceu.gtceu.common.data.GTSoundEntries;
69
import com.gregtechceu.gtceu.common.data.item.GTToolActions;
10+
import com.gregtechceu.gtceu.data.recipe.CustomTags;
711

12+
import net.minecraft.core.BlockPos;
813
import net.minecraft.nbt.CompoundTag;
914
import net.minecraft.network.chat.Component;
15+
import net.minecraft.server.level.ServerLevel;
1016
import net.minecraft.world.InteractionHand;
17+
import net.minecraft.world.InteractionResult;
1118
import net.minecraft.world.InteractionResultHolder;
1219
import net.minecraft.world.entity.player.Player;
1320
import net.minecraft.world.item.ItemStack;
1421
import net.minecraft.world.item.TooltipFlag;
22+
import net.minecraft.world.item.context.UseOnContext;
1523
import net.minecraft.world.level.Level;
24+
import net.minecraft.world.level.block.Block;
25+
import net.minecraft.world.level.block.state.BlockState;
26+
import net.minecraft.world.phys.BlockHitResult;
1627
import net.minecraftforge.common.ToolAction;
1728

1829
import lombok.Getter;
1930
import org.jetbrains.annotations.NotNull;
2031
import org.jetbrains.annotations.Nullable;
2132

2233
import java.util.List;
34+
import java.util.Set;
2335

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

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

64+
@Override
65+
public @NotNull InteractionResult onItemUse(UseOnContext context) {
66+
Level world = context.getLevel();
67+
BlockHitResult blockHitResult = context.getHitResult();
68+
Player player = context.getPlayer();
69+
ItemStack itemStack = context.getItemInHand();
70+
BlockState state = world.getBlockState(blockHitResult.getBlockPos());
71+
BlockPos pos = blockHitResult.getBlockPos();
72+
Set<GTToolType> toolTypes = ToolHelper.getToolTypes(itemStack);
73+
// Copied and adapted from
74+
// https://github.com/Creators-of-Create/Create/blob/mc1.20.1/dev/src/main/java/com/simibubi/create/content/equipment/wrench/WrenchItem.java
75+
if (toolTypes.contains(GTToolType.WRENCH) && GTCEu.Mods.isCreateLoaded() &&
76+
state.is(CustomTags.CREATE_WRENCH_PICKUP)) {
77+
if (!(world instanceof ServerLevel serverLevel))
78+
return InteractionResult.SUCCESS;
79+
if (player != null && !player.isCreative())
80+
Block.getDrops(state, serverLevel, pos, world.getBlockEntity(pos), player, itemStack)
81+
.forEach(stack -> player.getInventory().placeItemBackInInventory(stack));
82+
state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, true);
83+
world.destroyBlock(pos, false);
84+
GTSoundEntries.WRENCH_TOOL.playOnServer(serverLevel, pos, 1, GTValues.RNG.nextFloat() * .5f + .5f);
85+
return InteractionResult.SUCCESS;
86+
}
87+
88+
if (player != null) world.getBlockState(pos).use(world, player, context.getHand(), blockHitResult);
89+
return InteractionResult.SUCCESS;
90+
}
91+
5292
@Override
5393
public @NotNull InteractionResultHolder<ItemStack> onItemRightClick(@NotNull Level world, @NotNull Player player,
5494
@NotNull InteractionHand hand) {
5595
var itemStack = player.getItemInHand(hand);
5696
var tagCompound = getBehaviorsTag(itemStack);
5797
if (player.isShiftKeyDown()) {
58-
5998
var toolTypes = ToolHelper.getToolTypes(itemStack);
6099
if (toolTypes.contains(GTToolType.WRENCH)) {
61100
tagCompound.putByte("Mode",

src/main/java/com/gregtechceu/gtceu/data/recipe/CustomTags.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

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

5+
import net.minecraft.core.registries.BuiltInRegistries;
56
import net.minecraft.core.registries.Registries;
7+
import net.minecraft.resources.ResourceLocation;
68
import net.minecraft.tags.BlockTags;
79
import net.minecraft.tags.TagKey;
810
import net.minecraft.world.entity.EntityType;
@@ -200,6 +202,8 @@ public class CustomTags {
200202
public static final TagKey<Block> CLEANROOM_FLOORS = TagUtil.createModBlockTag("cleanroom_floors");
201203
public static final TagKey<Block> CHARCOAL_PILE_IGNITER_WALLS = TagUtil.createModBlockTag(
202204
"charcoal_pile_igniter_walls");
205+
public static final TagKey<Block> CREATE_WRENCH_PICKUP = TagUtil.optionalTag(BuiltInRegistries.BLOCK,
206+
new ResourceLocation("create", "wrench_pickup"));
203207

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

0 commit comments

Comments
 (0)