mirror of
https://github.com/Jozufozu/Flywheel.git
synced 2025-01-04 03:16:24 +01:00
commit
fd65acd91d
8 changed files with 42 additions and 10 deletions
|
@ -37,6 +37,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
|
||||||
LazyOptional<IFluidHandler> oldcap = capability;
|
LazyOptional<IFluidHandler> oldcap = capability;
|
||||||
capability = createEmptyHandler();
|
capability = createEmptyHandler();
|
||||||
oldcap.invalidate();
|
oldcap.invalidate();
|
||||||
|
super.stopTransferring();
|
||||||
}
|
}
|
||||||
|
|
||||||
private LazyOptional<IFluidHandler> createEmptyHandler() {
|
private LazyOptional<IFluidHandler> createEmptyHandler() {
|
||||||
|
@ -90,7 +91,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FluidStack drain(FluidStack resource, FluidAction action) {
|
public FluidStack drain(FluidStack resource, FluidAction action) {
|
||||||
if (!isConnected())
|
if (!canTransfer())
|
||||||
return FluidStack.EMPTY;
|
return FluidStack.EMPTY;
|
||||||
FluidStack drain = wrapped.drain(resource, action);
|
FluidStack drain = wrapped.drain(resource, action);
|
||||||
if (!drain.isEmpty() && action.execute())
|
if (!drain.isEmpty() && action.execute())
|
||||||
|
@ -100,7 +101,7 @@ public class PortableFluidInterfaceTileEntity extends PortableStorageInterfaceTi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FluidStack drain(int maxDrain, FluidAction action) {
|
public FluidStack drain(int maxDrain, FluidAction action) {
|
||||||
if (!isConnected())
|
if (!canTransfer())
|
||||||
return FluidStack.EMPTY;
|
return FluidStack.EMPTY;
|
||||||
FluidStack drain = wrapped.drain(maxDrain, action);
|
FluidStack drain = wrapped.drain(maxDrain, action);
|
||||||
if (!drain.isEmpty() && (action.execute() || drain.getAmount() == 1))
|
if (!drain.isEmpty() && (action.execute() || drain.getAmount() == 1))
|
||||||
|
|
|
@ -33,6 +33,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
|
||||||
LazyOptional<IItemHandlerModifiable> oldCap = capability;
|
LazyOptional<IItemHandlerModifiable> oldCap = capability;
|
||||||
capability = LazyOptional.of(() -> new InterfaceItemHandler(new ItemStackHandler(0)));
|
capability = LazyOptional.of(() -> new InterfaceItemHandler(new ItemStackHandler(0)));
|
||||||
oldCap.invalidate();
|
oldCap.invalidate();
|
||||||
|
super.stopTransferring();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -55,7 +56,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
public ItemStack extractItem(int slot, int amount, boolean simulate) {
|
||||||
if (!isConnected())
|
if (!canTransfer())
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
ItemStack extractItem = super.extractItem(slot, amount, simulate);
|
ItemStack extractItem = super.extractItem(slot, amount, simulate);
|
||||||
if (!simulate && !extractItem.isEmpty())
|
if (!simulate && !extractItem.isEmpty())
|
||||||
|
@ -65,7 +66,7 @@ public class PortableItemInterfaceTileEntity extends PortableStorageInterfaceTil
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) {
|
||||||
if (!isConnected())
|
if (!canTransfer())
|
||||||
return stack;
|
return stack;
|
||||||
ItemStack insertItem = super.insertItem(slot, stack, simulate);
|
ItemStack insertItem = super.insertItem(slot, stack, simulate);
|
||||||
if (!simulate && !insertItem.equals(stack, false))
|
if (!simulate && !insertItem.equals(stack, false))
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.simibubi.create.foundation.tileEntity.SmartTileEntity;
|
||||||
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
import com.simibubi.create.foundation.tileEntity.TileEntityBehaviour;
|
||||||
import com.simibubi.create.foundation.utility.LerpedFloat;
|
import com.simibubi.create.foundation.utility.LerpedFloat;
|
||||||
|
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.nbt.CompoundNBT;
|
import net.minecraft.nbt.CompoundNBT;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
import net.minecraft.tileentity.TileEntityType;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
@ -21,6 +22,7 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
|
||||||
protected float distance;
|
protected float distance;
|
||||||
protected LerpedFloat connectionAnimation;
|
protected LerpedFloat connectionAnimation;
|
||||||
protected boolean powered;
|
protected boolean powered;
|
||||||
|
protected Entity connectedEntity;
|
||||||
|
|
||||||
public PortableStorageInterfaceTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
public PortableStorageInterfaceTileEntity(TileEntityType<?> tileEntityTypeIn) {
|
||||||
super(tileEntityTypeIn);
|
super(tileEntityTypeIn);
|
||||||
|
@ -32,11 +34,20 @@ public abstract class PortableStorageInterfaceTileEntity extends SmartTileEntity
|
||||||
|
|
||||||
public void startTransferringTo(Contraption contraption, float distance) {
|
public void startTransferringTo(Contraption contraption, float distance) {
|
||||||
this.distance = distance;
|
this.distance = distance;
|
||||||
|
connectedEntity = contraption.entity;
|
||||||
startConnecting();
|
startConnecting();
|
||||||
notifyUpdate();
|
notifyUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void stopTransferring();
|
protected void stopTransferring() {
|
||||||
|
connectedEntity = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canTransfer() {
|
||||||
|
if (connectedEntity != null && !connectedEntity.isAlive())
|
||||||
|
stopTransferring();
|
||||||
|
return connectedEntity != null && isConnected();
|
||||||
|
}
|
||||||
|
|
||||||
protected abstract void invalidateCapability();
|
protected abstract void invalidateCapability();
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
protected Contraption contraption;
|
protected Contraption contraption;
|
||||||
protected boolean initialized;
|
protected boolean initialized;
|
||||||
private boolean prevPosInvalid;
|
private boolean prevPosInvalid;
|
||||||
|
private boolean ticking;
|
||||||
|
|
||||||
public AbstractContraptionEntity(EntityType<?> entityTypeIn, World worldIn) {
|
public AbstractContraptionEntity(EntityType<?> entityTypeIn, World worldIn) {
|
||||||
super(entityTypeIn, worldIn);
|
super(entityTypeIn, worldIn);
|
||||||
|
@ -246,6 +247,7 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
if (!world.isRemote)
|
if (!world.isRemote)
|
||||||
contraption.stalled = false;
|
contraption.stalled = false;
|
||||||
|
|
||||||
|
ticking = true;
|
||||||
for (MutablePair<BlockInfo, MovementContext> pair : contraption.getActors()) {
|
for (MutablePair<BlockInfo, MovementContext> pair : contraption.getActors()) {
|
||||||
MovementContext context = pair.right;
|
MovementContext context = pair.right;
|
||||||
BlockInfo blockInfo = pair.left;
|
BlockInfo blockInfo = pair.left;
|
||||||
|
@ -265,13 +267,25 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
continue;
|
continue;
|
||||||
if (newPosVisited && !context.stall) {
|
if (newPosVisited && !context.stall) {
|
||||||
actor.visitNewPosition(context, gridPosition);
|
actor.visitNewPosition(context, gridPosition);
|
||||||
|
if (!isAlive())
|
||||||
|
break;
|
||||||
context.firstMovement = false;
|
context.firstMovement = false;
|
||||||
}
|
}
|
||||||
if (!oldMotion.equals(context.motion))
|
if (!oldMotion.equals(context.motion)) {
|
||||||
actor.onSpeedChanged(context, oldMotion, context.motion);
|
actor.onSpeedChanged(context, oldMotion, context.motion);
|
||||||
|
if (!isAlive())
|
||||||
|
break;
|
||||||
|
}
|
||||||
actor.tick(context);
|
actor.tick(context);
|
||||||
|
if (!isAlive())
|
||||||
|
break;
|
||||||
contraption.stalled |= context.stall;
|
contraption.stalled |= context.stall;
|
||||||
}
|
}
|
||||||
|
if (!isAlive()) {
|
||||||
|
contraption.stop(world);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ticking = false;
|
||||||
|
|
||||||
for (Entity entity : getPassengers()) {
|
for (Entity entity : getPassengers()) {
|
||||||
if (!(entity instanceof OrientedContraptionEntity))
|
if (!(entity instanceof OrientedContraptionEntity))
|
||||||
|
@ -445,7 +459,8 @@ public abstract class AbstractContraptionEntity extends Entity implements IEntit
|
||||||
@Override
|
@Override
|
||||||
public void remove(boolean keepData) {
|
public void remove(boolean keepData) {
|
||||||
if (!world.isRemote && !removed && contraption != null) {
|
if (!world.isRemote && !removed && contraption != null) {
|
||||||
contraption.stop(world);
|
if (!ticking)
|
||||||
|
contraption.stop(world);
|
||||||
}
|
}
|
||||||
super.remove(keepData);
|
super.remove(keepData);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,8 @@ public class MechanicalPistonTileEntity extends LinearActuatorTileEntity {
|
||||||
if (!(world.getBlockState(pos)
|
if (!(world.getBlockState(pos)
|
||||||
.getBlock() instanceof MechanicalPistonBlock))
|
.getBlock() instanceof MechanicalPistonBlock))
|
||||||
return;
|
return;
|
||||||
|
if (getMovementSpeed() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
Direction direction = getBlockState().get(BlockStateProperties.FACING);
|
Direction direction = getBlockState().get(BlockStateProperties.FACING);
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,8 @@ public class SandPaperItem extends Item {
|
||||||
AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).grow(1f);
|
AxisAlignedBB bb = new AxisAlignedBB(hitVec, hitVec).grow(1f);
|
||||||
ItemEntity pickUp = null;
|
ItemEntity pickUp = null;
|
||||||
for (ItemEntity itemEntity : worldIn.getEntitiesWithinAABB(ItemEntity.class, bb)) {
|
for (ItemEntity itemEntity : worldIn.getEntitiesWithinAABB(ItemEntity.class, bb)) {
|
||||||
|
if (!itemEntity.isAlive())
|
||||||
|
continue;
|
||||||
if (itemEntity.getPositionVec()
|
if (itemEntity.getPositionVec()
|
||||||
.distanceTo(playerIn.getPositionVec()) > 3)
|
.distanceTo(playerIn.getPositionVec()) > 3)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -174,7 +174,7 @@ public class ItemHelper {
|
||||||
if (!simulate && hasEnoughItems)
|
if (!simulate && hasEnoughItems)
|
||||||
inv.extractItem(slot, stack.getCount(), false);
|
inv.extractItem(slot, stack.getCount(), false);
|
||||||
|
|
||||||
if (extracting.getCount() >= maxExtractionCount) {
|
if (extracting.getCount() >= maxExtractionCount || extracting.getCount() >= extracting.getMaxStackSize()) {
|
||||||
if (checkHasEnoughItems) {
|
if (checkHasEnoughItems) {
|
||||||
hasEnoughItems = true;
|
hasEnoughItems = true;
|
||||||
checkHasEnoughItems = false;
|
checkHasEnoughItems = false;
|
||||||
|
@ -234,7 +234,7 @@ public class ItemHelper {
|
||||||
|
|
||||||
if (!simulate)
|
if (!simulate)
|
||||||
inv.extractItem(slot, stack.getCount(), false);
|
inv.extractItem(slot, stack.getCount(), false);
|
||||||
if (extracting.getCount() == maxExtractionCount)
|
if (extracting.getCount() >= maxExtractionCount || extracting.getCount() >= extracting.getMaxStackSize())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,7 +59,7 @@ public final class NBTProcessors {
|
||||||
TileEntityType<?> type = tileEntity.getType();
|
TileEntityType<?> type = tileEntity.getType();
|
||||||
if (survival && survivalProcessors.containsKey(type))
|
if (survival && survivalProcessors.containsKey(type))
|
||||||
compound = survivalProcessors.get(type).apply(compound);
|
compound = survivalProcessors.get(type).apply(compound);
|
||||||
if (processors.containsKey(type))
|
if (compound != null && processors.containsKey(type))
|
||||||
return processors.get(type).apply(compound);
|
return processors.get(type).apply(compound);
|
||||||
if (tileEntity.onlyOpsCanSetNbt())
|
if (tileEntity.onlyOpsCanSetNbt())
|
||||||
return null;
|
return null;
|
||||||
|
|
Loading…
Reference in a new issue