From a3478ce1168b3c7ad456d646661f29e26dd3976d Mon Sep 17 00:00:00 2001 From: rbasamoyai Date: Fri, 3 Jan 2025 21:21:48 -0500 Subject: [PATCH] improvement, bug: Added missing features to cannon mount blocks - Added direct item input to Fixed Cannon Mount and Cannon Mount Extension - Added mechanical arm support to Cannon Mount Extension - Also added item input and mechanical arm support to the Yaw Controller - Added cannon contraption info tooltip to Fixed Cannon Mount - Renamed CannonMountMixin to CannonMountBlockEntityMixin on Fabric and Forge - Improved placement of Cannon Mount Extension to prioritize adjacent Cannon Mounts - Added tooltip to Fixed Cannon Mount --- CHANGELOG.md | 10 +++++ ....java => CannonMountBlockEntityMixin.java} | 4 +- .../CannonMountExtensionBlockEntityMixin.java | 32 +++++++++++++++ .../fabric/mixin/CannonMountPointMixin.java | 6 ++- .../FixedCannonMountBlockEntityMixin.java | 35 ++++++++++++++++ .../mixin/YawControllerBlockEntityMixin.java | 32 +++++++++++++++ .../resources/createbigcannons.mixins.json | 5 ++- ....java => CannonMountBlockEntityMixin.java} | 4 +- .../CannonMountExtensionBlockEntityMixin.java | 34 ++++++++++++++++ .../forge/mixin/CannonMountPointMixin.java | 6 ++- .../FixedCannonMountBlockEntityMixin.java | 40 +++++++++++++++++++ .../mixin/YawControllerBlockEntityMixin.java | 34 ++++++++++++++++ .../resources/createbigcannons.mixins.json | 5 ++- .../CannonMountExtensionBlock.java | 15 +++++++ .../FixedCannonMountBlockEntity.java | 7 ++++ .../quickfiring_breech/CannonMountPoint.java | 8 +++- .../index/CBCArmInteractionPointTypes.java | 6 +++ 17 files changed, 273 insertions(+), 10 deletions(-) rename fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/{CannonMountMixin.java => CannonMountBlockEntityMixin.java} (85%) create mode 100644 fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountExtensionBlockEntityMixin.java create mode 100644 fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/FixedCannonMountBlockEntityMixin.java create mode 100644 fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/YawControllerBlockEntityMixin.java rename forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/{CannonMountMixin.java => CannonMountBlockEntityMixin.java} (88%) create mode 100644 forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountExtensionBlockEntityMixin.java create mode 100644 forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/FixedCannonMountBlockEntityMixin.java create mode 100644 forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/YawControllerBlockEntityMixin.java diff --git a/CHANGELOG.md b/CHANGELOG.md index d322088b..46f2ec6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ **Create Big Cannons 5.8.2. Comes with a few fixes, mainly for missing functionality.** +Added: +- Added direct item input to Fixed Cannon Mount and Cannon Mount Extension + - Also added direct item input to Yaw Controller +- Added Mechanical Arm support to Cannon Mount Extension + - Also added Mechanical Arm support to Yaw Controller +- Added cannon contraption info tooltip to Fixed Cannon Mount +- Added tooltip to Fixed Cannon Mount +Changed: +- Improved placement of Cannon Mount Extension to prioritize adjacent Cannon Mounts + ## [5.8.1] - 2024-12-31 *"I'm free – I'm FREE, \ diff --git a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountMixin.java b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountBlockEntityMixin.java similarity index 85% rename from fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountMixin.java rename to fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountBlockEntityMixin.java index 67a402eb..b2a68300 100644 --- a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountMixin.java +++ b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountBlockEntityMixin.java @@ -18,9 +18,9 @@ import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; @Mixin(CannonMountBlockEntity.class) -public abstract class CannonMountMixin extends SmartBlockEntity implements SidedStorageBlockEntity { +public abstract class CannonMountBlockEntityMixin extends SmartBlockEntity implements SidedStorageBlockEntity { - CannonMountMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { + CannonMountBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { super(typeIn, pos, state); } diff --git a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountExtensionBlockEntityMixin.java b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountExtensionBlockEntityMixin.java new file mode 100644 index 00000000..02587819 --- /dev/null +++ b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountExtensionBlockEntityMixin.java @@ -0,0 +1,32 @@ +package rbasamoyai.createbigcannons.fabric.mixin; + +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; + +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; + +import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant; +import net.fabricmc.fabric.api.transfer.v1.storage.Storage; +import net.fabricmc.fabric.api.transfer.v1.storage.base.SidedStorageBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountExtensionBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; + +@Mixin(CannonMountExtensionBlockEntity.class) +public abstract class CannonMountExtensionBlockEntityMixin extends KineticBlockEntity implements ExtendsCannonMount, SidedStorageBlockEntity { + + CannonMountExtensionBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { super(typeIn, pos, state); } + + @Nullable + @Override + public Storage getItemStorage(@Nullable Direction face) { + CannonMountBlockEntity mount = this.getCannonMount(); + return mount instanceof SidedStorageBlockEntity transferable ? transferable.getItemStorage(face) : null; + } + +} diff --git a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountPointMixin.java b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountPointMixin.java index 1c04f394..99d1c8c3 100644 --- a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountPointMixin.java +++ b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/CannonMountPointMixin.java @@ -12,6 +12,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; import rbasamoyai.createbigcannons.cannon_control.contraption.AbstractMountedCannonContraption; import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; import rbasamoyai.createbigcannons.cannon_control.fixed_cannon_mount.FixedCannonMountBlockEntity; @@ -31,7 +32,10 @@ public ItemStack insert(ItemStack stack, TransactionContext ctx) { if (!simulate) stack.getTag().remove("DontSimulate"); BlockEntity be = this.getLevel().getBlockEntity(this.pos); PitchOrientedContraptionEntity poce; - if (be instanceof CannonMountBlockEntity mount) { + if (be instanceof ExtendsCannonMount extendsMount) { + CannonMountBlockEntity mount = extendsMount.getCannonMount(); + if (mount == null) + return stack; poce = mount.getContraption(); } else if (be instanceof FixedCannonMountBlockEntity mount) { poce = mount.getContraption(); diff --git a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/FixedCannonMountBlockEntityMixin.java b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/FixedCannonMountBlockEntityMixin.java new file mode 100644 index 00000000..188c97c7 --- /dev/null +++ b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/FixedCannonMountBlockEntityMixin.java @@ -0,0 +1,35 @@ +package rbasamoyai.createbigcannons.fabric.mixin; + +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; + +import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant; +import net.fabricmc.fabric.api.transfer.v1.storage.Storage; +import net.fabricmc.fabric.api.transfer.v1.storage.base.SidedStorageBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; +import rbasamoyai.createbigcannons.cannon_control.fixed_cannon_mount.FixedCannonMountBlockEntity; + +@Mixin(FixedCannonMountBlockEntity.class) +public abstract class FixedCannonMountBlockEntityMixin extends SmartBlockEntity implements SidedStorageBlockEntity { + + FixedCannonMountBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { super(typeIn, pos, state); } + + @Shadow + protected PitchOrientedContraptionEntity mountedContraption; + + @Nullable + @Override + public Storage getItemStorage(@Nullable Direction face) { + return this.mountedContraption instanceof SidedStorageBlockEntity transferable ? transferable.getItemStorage(face) : null; + } + + +} diff --git a/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/YawControllerBlockEntityMixin.java b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/YawControllerBlockEntityMixin.java new file mode 100644 index 00000000..9c800c0a --- /dev/null +++ b/fabric/src/main/java/rbasamoyai/createbigcannons/fabric/mixin/YawControllerBlockEntityMixin.java @@ -0,0 +1,32 @@ +package rbasamoyai.createbigcannons.fabric.mixin; + +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; + +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; + +import net.fabricmc.fabric.api.transfer.v1.item.ItemVariant; +import net.fabricmc.fabric.api.transfer.v1.storage.Storage; +import net.fabricmc.fabric.api.transfer.v1.storage.base.SidedStorageBlockEntity; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.YawControllerBlockEntity; + +@Mixin(YawControllerBlockEntity.class) +public abstract class YawControllerBlockEntityMixin extends KineticBlockEntity implements ExtendsCannonMount, SidedStorageBlockEntity { + + YawControllerBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { super(typeIn, pos, state); } + + @Nullable + @Override + public Storage getItemStorage(@Nullable Direction face) { + CannonMountBlockEntity mount = this.getCannonMount(); + return mount instanceof SidedStorageBlockEntity transferable ? transferable.getItemStorage(face) : null; + } + +} diff --git a/fabric/src/main/resources/createbigcannons.mixins.json b/fabric/src/main/resources/createbigcannons.mixins.json index 4afbbc55..af7c9ee0 100644 --- a/fabric/src/main/resources/createbigcannons.mixins.json +++ b/fabric/src/main/resources/createbigcannons.mixins.json @@ -18,15 +18,18 @@ "ArmTileEntityMixin", "AutocannonAmmoContainerBlockEntityMixin", "BigCartridgeBlockMixin", - "CannonMountMixin", + "CannonMountBlockEntityMixin", + "CannonMountExtensionBlockEntityMixin", "CannonMountPointMixin", "CreateInitMixin", "ExplosionMixin", "FireBlockMixin", + "FixedCannonMountBlockEntityMixin", "GasMaskItemMixin", "MountedAutocannonContraptionMixin", "PitchOrientedContraptionEntityMixin", "PowderChargeBlockMixin", + "YawControllerBlockEntityMixin", "compat.fabric_api.ItemStorageMixin" ], "injectors": { diff --git a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountMixin.java b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountBlockEntityMixin.java similarity index 88% rename from forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountMixin.java rename to forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountBlockEntityMixin.java index 886a9b4c..c0947a98 100644 --- a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountMixin.java +++ b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountBlockEntityMixin.java @@ -19,9 +19,9 @@ import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; @Mixin(CannonMountBlockEntity.class) -public abstract class CannonMountMixin extends SmartBlockEntity { +public abstract class CannonMountBlockEntityMixin extends SmartBlockEntity { - CannonMountMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { + CannonMountBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { super(typeIn, pos, state); } diff --git a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountExtensionBlockEntityMixin.java b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountExtensionBlockEntityMixin.java new file mode 100644 index 00000000..b09fb495 --- /dev/null +++ b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountExtensionBlockEntityMixin.java @@ -0,0 +1,34 @@ +package rbasamoyai.createbigcannons.forge.mixin; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; + +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountExtensionBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; + +@Mixin(CannonMountExtensionBlockEntity.class) +public abstract class CannonMountExtensionBlockEntityMixin extends KineticBlockEntity implements ExtendsCannonMount { + + CannonMountExtensionBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { + super(typeIn, pos, state); + } + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + CannonMountBlockEntity cannonMount = this.getCannonMount(); + return cannonMount == null ? super.getCapability(cap, side) : cannonMount.getCapability(cap, side); + } + +} diff --git a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountPointMixin.java b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountPointMixin.java index ed50c86d..3701592c 100644 --- a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountPointMixin.java +++ b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/CannonMountPointMixin.java @@ -11,6 +11,7 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; import rbasamoyai.createbigcannons.cannon_control.contraption.AbstractMountedCannonContraption; import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; import rbasamoyai.createbigcannons.cannon_control.fixed_cannon_mount.FixedCannonMountBlockEntity; @@ -28,7 +29,10 @@ public ItemStack insert(ItemStack stack, boolean simulate) { CannonMountPoint self = (CannonMountPoint) (Object) this; BlockEntity be = this.getLevel().getBlockEntity(this.pos); PitchOrientedContraptionEntity poce; - if (be instanceof CannonMountBlockEntity mount) { + if (be instanceof ExtendsCannonMount extendsMount) { + CannonMountBlockEntity mount = extendsMount.getCannonMount(); + if (mount == null) + return stack; poce = mount.getContraption(); } else if (be instanceof FixedCannonMountBlockEntity mount) { poce = mount.getContraption(); diff --git a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/FixedCannonMountBlockEntityMixin.java b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/FixedCannonMountBlockEntityMixin.java new file mode 100644 index 00000000..6fe16e52 --- /dev/null +++ b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/FixedCannonMountBlockEntityMixin.java @@ -0,0 +1,40 @@ +package rbasamoyai.createbigcannons.forge.mixin; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; + +import com.simibubi.create.foundation.blockEntity.SmartBlockEntity; + +import dev.architectury.patchedmixin.staticmixin.spongepowered.asm.mixin.Shadow; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.common.util.LazyOptional; +import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; +import rbasamoyai.createbigcannons.cannon_control.fixed_cannon_mount.FixedCannonMountBlockEntity; + +@Mixin(FixedCannonMountBlockEntity.class) +public abstract class FixedCannonMountBlockEntityMixin extends SmartBlockEntity { + + FixedCannonMountBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { + super(typeIn, pos, state); + } + + @Shadow + protected PitchOrientedContraptionEntity mountedContraption; + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + if (cap == ForgeCapabilities.ITEM_HANDLER && this.mountedContraption != null) { + return this.mountedContraption.getCapability(cap, side).cast(); + } + return super.getCapability(cap, side); + } + +} diff --git a/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/YawControllerBlockEntityMixin.java b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/YawControllerBlockEntityMixin.java new file mode 100644 index 00000000..5e674a88 --- /dev/null +++ b/forge/src/main/java/rbasamoyai/createbigcannons/forge/mixin/YawControllerBlockEntityMixin.java @@ -0,0 +1,34 @@ +package rbasamoyai.createbigcannons.forge.mixin; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import org.spongepowered.asm.mixin.Mixin; + +import com.simibubi.create.content.kinetics.base.KineticBlockEntity; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.YawControllerBlockEntity; + +@Mixin(YawControllerBlockEntity.class) +public abstract class YawControllerBlockEntityMixin extends KineticBlockEntity implements ExtendsCannonMount { + + YawControllerBlockEntityMixin(BlockEntityType typeIn, BlockPos pos, BlockState state) { + super(typeIn, pos, state); + } + + @Nonnull + @Override + public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { + CannonMountBlockEntity cannonMount = this.getCannonMount(); + return cannonMount == null ? super.getCapability(cap, side) : cannonMount.getCapability(cap, side); + } + +} diff --git a/forge/src/main/resources/createbigcannons.mixins.json b/forge/src/main/resources/createbigcannons.mixins.json index eb94fc9b..8f5a77a7 100644 --- a/forge/src/main/resources/createbigcannons.mixins.json +++ b/forge/src/main/resources/createbigcannons.mixins.json @@ -12,15 +12,18 @@ "AbstractCannonProjectileMixin", "AutocannonAmmoContainerBlockEntityMixin", "BigCartridgeBlockMixin", - "CannonMountMixin", + "CannonMountBlockEntityMixin", + "CannonMountExtensionBlockEntityMixin", "CannonMountPointMixin", "CBCFlowingFluidMixin", "CBCLiquidBlockMixin", + "FixedCannonMountBlockEntityMixin", "GasMaskItemMixin", "MountedAutocannonContraptionMixin", "PitchOrientedContraptionEntityMixin", "PowderChargeBlockMixin", "ProjectileBlockMixin", + "YawControllerBlockEntityMixin", "compat.FramedAdjustableDoubleBlockEntityAccessor" ], "injectors": { diff --git a/src/main/java/rbasamoyai/createbigcannons/cannon_control/cannon_mount/CannonMountExtensionBlock.java b/src/main/java/rbasamoyai/createbigcannons/cannon_control/cannon_mount/CannonMountExtensionBlock.java index 5b327fe8..a7938a1e 100644 --- a/src/main/java/rbasamoyai/createbigcannons/cannon_control/cannon_mount/CannonMountExtensionBlock.java +++ b/src/main/java/rbasamoyai/createbigcannons/cannon_control/cannon_mount/CannonMountExtensionBlock.java @@ -2,13 +2,17 @@ import com.simibubi.create.content.kinetics.base.DirectionalKineticBlock; import com.simibubi.create.foundation.block.IBE; +import com.simibubi.create.foundation.utility.Iterate; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import rbasamoyai.createbigcannons.index.CBCBlockEntities; +import rbasamoyai.createbigcannons.index.CBCBlocks; public class CannonMountExtensionBlock extends DirectionalKineticBlock implements IBE { @@ -36,4 +40,15 @@ public BlockEntityType getBlockEntity return CBCBlockEntities.CANNON_MOUNT_EXTENSION.get(); } + @Override + public Direction getPreferredFacing(BlockPlaceContext context) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + for (Direction dir : Iterate.directions) { + if (CBCBlocks.CANNON_MOUNT.has(level.getBlockState(pos.relative(dir)))) + return dir.getOpposite(); + } + return super.getPreferredFacing(context); + } + } diff --git a/src/main/java/rbasamoyai/createbigcannons/cannon_control/fixed_cannon_mount/FixedCannonMountBlockEntity.java b/src/main/java/rbasamoyai/createbigcannons/cannon_control/fixed_cannon_mount/FixedCannonMountBlockEntity.java index 0abab2b5..a8896120 100644 --- a/src/main/java/rbasamoyai/createbigcannons/cannon_control/fixed_cannon_mount/FixedCannonMountBlockEntity.java +++ b/src/main/java/rbasamoyai/createbigcannons/cannon_control/fixed_cannon_mount/FixedCannonMountBlockEntity.java @@ -40,6 +40,7 @@ import net.minecraft.world.phys.Vec3; import rbasamoyai.createbigcannons.CreateBigCannons; import rbasamoyai.createbigcannons.cannon_control.ControlPitchContraption; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; import rbasamoyai.createbigcannons.cannon_control.contraption.AbstractMountedCannonContraption; import rbasamoyai.createbigcannons.cannon_control.contraption.PitchOrientedContraptionEntity; import rbasamoyai.createbigcannons.cannons.CannonContraptionProviderBlock; @@ -255,6 +256,12 @@ protected void read(CompoundTag tag, boolean clientPacket) { this.mountedContraption = null; } + @Override + public boolean addToGoggleTooltip(List tooltip, boolean isPlayerSneaking) { + ExtendsCannonMount.addCannonInfoToTooltip(tooltip, this.mountedContraption); + return true; + } + public Vec3 getInteractionLocation() { return this.mountedContraption != null && this.mountedContraption.getContraption() instanceof AbstractMountedCannonContraption cannon ? cannon.getInteractionVec(this.mountedContraption) : Vec3.atCenterOf(this.worldPosition); diff --git a/src/main/java/rbasamoyai/createbigcannons/cannons/big_cannons/breeches/quickfiring_breech/CannonMountPoint.java b/src/main/java/rbasamoyai/createbigcannons/cannons/big_cannons/breeches/quickfiring_breech/CannonMountPoint.java index aefca294..e9c999a5 100644 --- a/src/main/java/rbasamoyai/createbigcannons/cannons/big_cannons/breeches/quickfiring_breech/CannonMountPoint.java +++ b/src/main/java/rbasamoyai/createbigcannons/cannons/big_cannons/breeches/quickfiring_breech/CannonMountPoint.java @@ -17,6 +17,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; import net.minecraft.world.phys.Vec3; import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.ExtendsCannonMount; import rbasamoyai.createbigcannons.cannon_control.contraption.AbstractMountedCannonContraption; import rbasamoyai.createbigcannons.cannon_control.contraption.MountedAutocannonContraption; import rbasamoyai.createbigcannons.cannon_control.contraption.MountedBigCannonContraption; @@ -41,8 +42,11 @@ public CannonMountPoint(ArmInteractionPointType type, Level level, BlockPos pos, @Override protected Vec3 getInteractionPositionVector() { BlockEntity be = this.getLevel().getBlockEntity(this.pos); - if (be instanceof CannonMountBlockEntity mount) - return mount.getInteractionLocation(); + if (be instanceof ExtendsCannonMount extendsCannonMount) { + CannonMountBlockEntity mount = extendsCannonMount.getCannonMount(); + if (mount != null) + mount.getInteractionLocation(); + } if (be instanceof FixedCannonMountBlockEntity mount) return mount.getInteractionLocation(); return super.getInteractionPositionVector(); diff --git a/src/main/java/rbasamoyai/createbigcannons/index/CBCArmInteractionPointTypes.java b/src/main/java/rbasamoyai/createbigcannons/index/CBCArmInteractionPointTypes.java index 99a6bbad..1c45a4d8 100644 --- a/src/main/java/rbasamoyai/createbigcannons/index/CBCArmInteractionPointTypes.java +++ b/src/main/java/rbasamoyai/createbigcannons/index/CBCArmInteractionPointTypes.java @@ -13,6 +13,8 @@ import net.minecraft.world.level.block.state.BlockState; import rbasamoyai.createbigcannons.CreateBigCannons; import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.CannonMountExtensionBlockEntity; +import rbasamoyai.createbigcannons.cannon_control.cannon_mount.YawControllerBlockEntity; import rbasamoyai.createbigcannons.cannon_control.fixed_cannon_mount.FixedCannonMountBlockEntity; import rbasamoyai.createbigcannons.cannons.big_cannons.breeches.quickfiring_breech.CannonMountPoint; @@ -37,6 +39,10 @@ public boolean canCreatePoint(Level level, BlockPos pos, BlockState state) { return level.getBlockEntity(pos) instanceof CannonMountBlockEntity; if (CBCBlocks.FIXED_CANNON_MOUNT.has(state)) return level.getBlockEntity(pos) instanceof FixedCannonMountBlockEntity; + if (CBCBlocks.CANNON_MOUNT_EXTENSION.has(state)) + return level.getBlockEntity(pos) instanceof CannonMountExtensionBlockEntity; + if (CBCBlocks.YAW_CONTROLLER.has(state)) + return level.getBlockEntity(pos) instanceof YawControllerBlockEntity; return false; }