1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
| // server_scripts/wrench.js
const $Random = Java.tryLoadClass("java.util.Random");
const RANDOM = new $Random();
const $HitResult$Type = Java.tryLoadClass("net.minecraft.world.phys.HitResult$Type");
const $BlockHitResult = Java.tryLoadClass("net.minecraft.world.phys.BlockHitResult");
const $UseOnContext = Java.tryLoadClass("net.minecraft.world.item.context.UseOnContext");
const $AllSoundEvents = Java.tryLoadClass("com.simibubi.create.AllSoundEvents");
const $InteractionHand = Java.tryLoadClass("net.minecraft.world.InteractionHand");
const $IWrenchable = Java.tryLoadClass("com.simibubi.create.content.equipment.wrench.IWrenchable");
const $Block = Java.tryLoadClass("net.minecraft.world.level.block.Block")
const $ItemStack = Java.tryLoadClass("net.minecraft.world.item.ItemStack")
// https://github.com/Creators-of-Create/Create/blob/d48a504486311f3175f4ebef3b0649140e728fbb/src/generated/resources/data/create/tags/blocks/wrench_pickup.json
const WrenchPickup = [
"create:andesite_bars",
"create:brass_bars",
"create:copper_bars",
"create:industrial_iron_block",
"minecraft:redstone_wire",
"minecraft:redstone_torch",
"minecraft:repeater",
"minecraft:lever",
"minecraft:comparator",
"minecraft:observer",
"minecraft:redstone_wall_torch",
"minecraft:piston",
"minecraft:sticky_piston",
"minecraft:tripwire",
"minecraft:tripwire_hook",
"minecraft:daylight_detector",
"minecraft:target",
"minecraft:hopper",
"#minecraft:buttons",
"#minecraft:pressure_plates",
"#minecraft:rails",
];
const Wrenchs = ["create_armorer:special_melee_wrench"];
ItemEvents.firstRightClicked((event) => {
const item = event.getItem();
if (item.equals(Item.of("minecraft:air"))) return;
const target = event.getTarget();
if (
(target !== null && target.type.toString() !== $HitResult$Type.BLOCK.toString()) ||
!(item.getId().toString() === "tacz:modern_kinetic_gun" && Wrenchs.includes(item.getNbt().getString("GunId")))
) {
return;
}
const state = target.block.getBlockState();
const block = state.getBlock();
const world = event.getLevel();
const player = event.getPlayer();
const blockHitResult = new $BlockHitResult(
target.hit,
target.facing,
target.block.getPos(),
false
);
const context = new $UseOnContext(
world,
player,
$InteractionHand.MAIN_HAND,
item,
blockHitResult
);
if (block instanceof $IWrenchable) {
const actor = block;
player.isShiftKeyDown()
? actor.onSneakWrenched(state, context)
: actor.onWrenched(state, context);
} else {
player.isShiftKeyDown() &&
WrenchPickup.includes(state.getBlock().getIdLocation().toString()) &&
onItemUseOnOther(player, world, target, item);
}
});
function onItemUseOnOther(player, world, target, item) {
const state = target.block.getBlockState();
const pos = target.block.getPos();
if (player !== null && !player.isCreative()) {
$Block
.getDrops(state, world, pos, world.getBlockEntity(pos), player, item)
.forEach((itemStack) => {
player.getInventory().placeItemBackInInventory(itemStack);
});
}
state.spawnAfterBreak(world, pos, $ItemStack.EMPTY, true);
world.destroyBlock(pos, false);
$AllSoundEvents.WRENCH_REMOVE.playOnServer(
world,
pos,
1.0,
RANDOM.nextFloat() * 0.5 + 0.5
);
}
|