mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-15 21:13:42 +01:00
Fix activator rail does not disassemble furnace minecart contraptions
This commit is contained in:
parent
88ba7f2887
commit
e62bbfd9c0
1 changed files with 44 additions and 1 deletions
|
@ -19,10 +19,16 @@ import com.simibubi.create.foundation.utility.Couple;
|
|||
import com.simibubi.create.foundation.utility.Iterate;
|
||||
import com.simibubi.create.foundation.utility.VecHelper;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.PoweredRailBlock;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
|
||||
import net.minecraft.entity.item.minecart.MinecartEntity;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.NBTUtil;
|
||||
import net.minecraft.tags.BlockTags;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.Constants.NBT;
|
||||
|
@ -78,8 +84,45 @@ public class MinecartController implements INBTSerializable<CompoundNBT> {
|
|||
internalStall.booleanValue() || otherCart == null || !otherCart.isPresent() || otherCart.isStalled(false));
|
||||
|
||||
}));
|
||||
if (!world.isRemote)
|
||||
if (!world.isRemote) {
|
||||
setStalled(internalStall.booleanValue(), true);
|
||||
disassemble(cart);
|
||||
}
|
||||
}
|
||||
|
||||
private void disassemble(AbstractMinecartEntity cart) {
|
||||
if (cart instanceof MinecartEntity) {
|
||||
return;
|
||||
}
|
||||
List<Entity> passengers = cart.getPassengers();
|
||||
if (passengers.isEmpty() || !(passengers.get(0) instanceof AbstractContraptionEntity)) {
|
||||
return;
|
||||
}
|
||||
World world = cart.world;
|
||||
int i = MathHelper.floor(cart.getX());
|
||||
int j = MathHelper.floor(cart.getY());
|
||||
int k = MathHelper.floor(cart.getZ());
|
||||
if (world.getBlockState(new BlockPos(i, j - 1, k))
|
||||
.isIn(BlockTags.RAILS)) {
|
||||
--j;
|
||||
}
|
||||
BlockPos blockpos = new BlockPos(i, j, k);
|
||||
BlockState blockstate = world.getBlockState(blockpos);
|
||||
if (cart.canUseRail() && blockstate.isIn(BlockTags.RAILS)
|
||||
&& blockstate.getBlock() instanceof PoweredRailBlock
|
||||
&& ((PoweredRailBlock) blockstate.getBlock())
|
||||
.isActivatorRail()) {
|
||||
if (cart.isBeingRidden()) {
|
||||
cart.removePassengers();
|
||||
}
|
||||
|
||||
if (cart.getRollingAmplitude() == 0) {
|
||||
cart.setRollingDirection(-cart.getRollingDirection());
|
||||
cart.setRollingAmplitude(10);
|
||||
cart.setDamage(50.0F);
|
||||
cart.velocityChanged = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isFullyCoupled() {
|
||||
|
|
Loading…
Reference in a new issue