-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathBlockItemMixin.java
More file actions
42 lines (40 loc) · 1.77 KB
/
BlockItemMixin.java
File metadata and controls
42 lines (40 loc) · 1.77 KB
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
package net.modificationstation.stationapi.mixin.block;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.modificationstation.stationapi.api.StationAPI;
import net.modificationstation.stationapi.api.event.block.BlockEvent;
import net.modificationstation.stationapi.api.registry.BlockRegistry;
import net.modificationstation.stationapi.api.util.math.Direction;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(BlockItem.class)
class BlockItemMixin {
@WrapOperation(
method = "useOnBlock",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/world/World;method_201(IIIII)Z"
)
)
private boolean stationapi_handlePlace(
World world, int x, int y, int z, int id, int meta, Operation<Boolean> placeFunction,
ItemStack blockItem, PlayerEntity player, World argWorld, int argX, int argY, int argZ, int side
) {
return StationAPI.EVENT_BUS.post(
BlockEvent.BeforePlacedByItem.builder()
.world(world)
.player(player)
.x(x).y(y).z(z)
.side(Direction.byIndex(side))
.block(BlockRegistry.INSTANCE.get(id))
.meta(meta)
.blockItem(blockItem)
.placeFunction(() -> placeFunction.call(world, x, y, z, id, meta))
.build()
).placeFunction.getAsBoolean();
}
}