From f03001699b7a37b4583ec72ab26a73ca915eb78d Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Wed, 19 Dec 2018 20:44:53 -0500 Subject: [PATCH] Add part activation --- .../container/MultipartContainerBlock.java | 31 +++++++++++++++---- .../simplemultipart/multipart/Multipart.java | 14 +++++++++ .../multipart/MultipartState.java | 7 +++++ .../simplemultipart/test/GreenMultipart.java | 8 +++++ 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlock.java b/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlock.java index d8d0276..fc01272 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlock.java +++ b/src/main/java/net/shadowfacts/simplemultipart/container/MultipartContainerBlock.java @@ -14,6 +14,8 @@ import net.minecraft.world.World; import net.shadowfacts.simplemultipart.client.util.RenderStateProvider; import net.shadowfacts.simplemultipart.multipart.MultipartSlot; import net.shadowfacts.simplemultipart.multipart.MultipartState; +import net.shadowfacts.simplemultipart.util.MultipartHelper; +import net.shadowfacts.simplemultipart.util.MultipartHitResult; import java.util.Map; @@ -27,19 +29,36 @@ public class MultipartContainerBlock extends Block implements BlockEntityProvide } @Override - public boolean activate(BlockState var1, World world, BlockPos pos, PlayerEntity player, Hand var5, Direction var6, float var7, float var8, float var9) { - if (player.isSneaking()) { - MultipartContainerBlockEntity container = (MultipartContainerBlockEntity)world.getBlockEntity(pos); - System.out.println(container.getParts()); - return true; - } else { + public boolean activate(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, Direction side, float hitX, float hitY, float hitZ) { +// if (player.isSneaking()) { +// MultipartContainerBlockEntity container = (MultipartContainerBlockEntity)world.getBlockEntity(pos); +// System.out.println(container.getParts()); +// return true; +// } else { +// return false; +// } + + MultipartContainerBlockEntity container = (MultipartContainerBlockEntity)world.getBlockEntity(pos); + if (container == null) { return false; } + + MultipartHitResult hit = MultipartHelper.rayTrace(container, world, pos, player); + if (hit == null) { + return false; + } + + MultipartState partState = container.get(hit.partSlot); + return partState.activate(hit.partSlot, container, player, hand); } @Override public BlockState getStateForRendering(BlockState state, BlockPos pos, ExtendedBlockView world) { MultipartContainerBlockEntity container = (MultipartContainerBlockEntity)world.getBlockEntity(pos); + if (container == null) { + return state; + } + Map parts = container.getParts(); return new MultipartContainerBlockState(state, parts); } diff --git a/src/main/java/net/shadowfacts/simplemultipart/multipart/Multipart.java b/src/main/java/net/shadowfacts/simplemultipart/multipart/Multipart.java index 69ed681..4afbf0b 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/multipart/Multipart.java +++ b/src/main/java/net/shadowfacts/simplemultipart/multipart/Multipart.java @@ -1,10 +1,13 @@ package net.shadowfacts.simplemultipart.multipart; import com.google.common.collect.ImmutableList; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.server.world.ServerWorld; import net.minecraft.state.StateFactory; +import net.minecraft.util.Hand; import net.minecraft.util.Identifier; +import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.loot.LootSupplier; import net.minecraft.world.loot.LootTables; @@ -75,6 +78,9 @@ public abstract class Multipart { return dropTableId; } + /** + * Can be overridden, should only be called via {@link MultipartState#getDroppedStacks)} + */ @Deprecated public List getDroppedStacks(MultipartState state, LootContext.Builder builder) { Identifier dropTableId = getDropTableId(); @@ -88,4 +94,12 @@ public abstract class Multipart { } } + /** + * Can be overridden, should only be called via {@link MultipartState#activate} + */ + @Deprecated + public boolean activate(MultipartState state, MultipartSlot slot, MultipartContainerBlockEntity container, PlayerEntity player, Hand hand) { + return false; + } + } diff --git a/src/main/java/net/shadowfacts/simplemultipart/multipart/MultipartState.java b/src/main/java/net/shadowfacts/simplemultipart/multipart/MultipartState.java index b0c9354..96754b7 100644 --- a/src/main/java/net/shadowfacts/simplemultipart/multipart/MultipartState.java +++ b/src/main/java/net/shadowfacts/simplemultipart/multipart/MultipartState.java @@ -1,9 +1,11 @@ package net.shadowfacts.simplemultipart.multipart; import com.google.common.collect.ImmutableMap; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.state.AbstractPropertyContainer; import net.minecraft.state.property.Property; +import net.minecraft.util.Hand; import net.minecraft.util.shape.VoxelShape; import net.minecraft.world.loot.context.LootContext; import net.shadowfacts.simplemultipart.container.MultipartContainerBlockEntity; @@ -38,4 +40,9 @@ public class MultipartState extends AbstractPropertyContainer