For the techies
- Fixed Deployers accepting held items from the back - Deployers now set filters on blocks only by targeting any location on a correct side - Fixed Schematics loaded for deployer printing not rotating block entity contents
This commit is contained in:
parent
f5ba751e6a
commit
5bf263f63c
5 changed files with 34 additions and 12 deletions
|
@ -67,11 +67,13 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements IBE<De
|
|||
|
||||
@Override
|
||||
public InteractionResult onWrenched(BlockState state, UseOnContext context) {
|
||||
Vec3 normal = Vec3.atLowerCornerOf(state.getValue(FACING)
|
||||
.getNormal());
|
||||
Vec3 location = context.getClickLocation()
|
||||
.subtract(Vec3.atCenterOf(context.getClickedPos()))
|
||||
.multiply(Vec3.atLowerCornerOf(state.getValue(FACING)
|
||||
.getNormal()));
|
||||
if (location.length() > .25f) {
|
||||
.subtract(Vec3.atCenterOf(context.getClickedPos())
|
||||
.subtract(normal.scale(.5)))
|
||||
.multiply(normal);
|
||||
if (location.length() > .75f) {
|
||||
if (!context.getLevel().isClientSide)
|
||||
withBlockEntityDo(context.getLevel(), context.getClickedPos(), DeployerBlockEntity::changeMode);
|
||||
return InteractionResult.SUCCESS;
|
||||
|
@ -110,11 +112,13 @@ public class DeployerBlock extends DirectionalAxisKineticBlock implements IBE<De
|
|||
if (AllItems.WRENCH.isIn(heldByPlayer))
|
||||
return InteractionResult.PASS;
|
||||
|
||||
Vec3 normal = Vec3.atLowerCornerOf(state.getValue(FACING)
|
||||
.getNormal());
|
||||
Vec3 location = hit.getLocation()
|
||||
.subtract(Vec3.atCenterOf(pos))
|
||||
.multiply(Vec3.atLowerCornerOf(state.getValue(FACING)
|
||||
.getNormal()));
|
||||
if (hit.getDirection() != state.getValue(FACING) && location.length() < .25f)
|
||||
.subtract(Vec3.atCenterOf(pos)
|
||||
.subtract(normal.scale(.5)))
|
||||
.multiply(normal);
|
||||
if (location.length() < .75f)
|
||||
return InteractionResult.PASS;
|
||||
if (worldIn.isClientSide)
|
||||
return InteractionResult.SUCCESS;
|
||||
|
|
|
@ -112,7 +112,7 @@ public class SchematicPrinter {
|
|||
|
||||
StructureTransform transform = new StructureTransform(settings.getRotationPivot(), Direction.Axis.Y,
|
||||
settings.getRotation(), settings.getMirror());
|
||||
for (BlockEntity be : blockReader.blockEntities.values())
|
||||
for (BlockEntity be : blockReader.getBlockEntities())
|
||||
transform.apply(be);
|
||||
|
||||
printingEntityIndex = -1;
|
||||
|
|
|
@ -228,6 +228,10 @@ public class SchematicWorld extends WrappedWorld implements ServerLevelAccessor
|
|||
public BoundingBox getBounds() {
|
||||
return bounds;
|
||||
}
|
||||
|
||||
public Iterable<BlockEntity> getBlockEntities() {
|
||||
return blockEntities.values();
|
||||
}
|
||||
|
||||
public Iterable<BlockEntity> getRenderedBlockEntities() {
|
||||
return renderedBlockEntities;
|
||||
|
|
|
@ -6,17 +6,20 @@ import javax.annotation.Nullable;
|
|||
|
||||
import com.google.common.cache.Cache;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.simibubi.create.content.contraptions.components.structureMovement.StructureTransform;
|
||||
import com.simibubi.create.content.schematics.SchematicWorld;
|
||||
import com.simibubi.create.content.schematics.item.SchematicItem;
|
||||
import com.simibubi.create.foundation.utility.WorldAttached;
|
||||
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.Vec3i;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.NbtUtils;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
|
||||
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
|
||||
|
||||
|
@ -65,6 +68,11 @@ public class SchematicInstances {
|
|||
StructurePlaceSettings settings = SchematicItem.getSettings(schematic);
|
||||
activeTemplate.placeInWorld(world, anchor, anchor, settings, wrapped.getRandom(), Block.UPDATE_CLIENTS);
|
||||
|
||||
StructureTransform transform = new StructureTransform(settings.getRotationPivot(), Direction.Axis.Y,
|
||||
settings.getRotation(), settings.getMirror());
|
||||
for (BlockEntity be : world.getBlockEntities())
|
||||
transform.apply(be);
|
||||
|
||||
return world;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import net.minecraft.world.entity.player.Player;
|
|||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.common.util.FakePlayer;
|
||||
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.DistExecutor;
|
||||
|
@ -63,15 +64,20 @@ public class ValueSettingsInputHandler {
|
|||
if (valueSettingsBehaviour.onlyVisibleWithWrench()
|
||||
&& !AllItemTags.WRENCH.matches(player.getItemInHand(hand)))
|
||||
continue;
|
||||
if (valueSettingsBehaviour.getSlotPositioning()instanceof ValueBoxTransform.Sided sidedSlot)
|
||||
if (valueSettingsBehaviour.getSlotPositioning()instanceof ValueBoxTransform.Sided sidedSlot) {
|
||||
if (!sidedSlot.isSideActive(sbe.getBlockState(), ray.getDirection()))
|
||||
continue;
|
||||
sidedSlot.fromSide(ray.getDirection());
|
||||
if (!valueSettingsBehaviour.testHit(ray.getLocation()))
|
||||
}
|
||||
|
||||
boolean fakePlayer = player instanceof FakePlayer;
|
||||
if (!valueSettingsBehaviour.testHit(ray.getLocation()) && !fakePlayer)
|
||||
continue;
|
||||
|
||||
event.setCanceled(true);
|
||||
event.setCancellationResult(InteractionResult.SUCCESS);
|
||||
|
||||
if (!valueSettingsBehaviour.acceptsValueSettings()) {
|
||||
if (!valueSettingsBehaviour.acceptsValueSettings() || fakePlayer) {
|
||||
valueSettingsBehaviour.onShortInteract(player, hand, ray.getDirection());
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue