Consistently Crushing Entities

- Fix known issue with omnidirectional crushing wheels inconsistently moving crushed mob drops to the output location.
This commit is contained in:
_0Steven 2021-02-20 15:08:58 +01:00
parent afe2c4497d
commit a32cbe15a3
2 changed files with 19 additions and 13 deletions

View file

@ -20,6 +20,7 @@ import com.simibubi.create.foundation.utility.VecHelper;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.item.ItemEntity; import net.minecraft.entity.item.ItemEntity;
import net.minecraft.item.BlockItem; import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -199,12 +200,25 @@ public class CrushingWheelControllerTileEntity extends SmartTileEntity {
return; return;
if (!(processingEntity instanceof ItemEntity)) { if (!(processingEntity instanceof ItemEntity)) {
Vec3d entityOutPos = outPos.add(facing.getAxis() == Axis.X ? .5f * offset : 0f
, facing.getAxis() == Axis.Y ? .5f * offset : 0f
, facing.getAxis() == Axis.Z ? .5f * offset : 0f);
int crusherDamage = AllConfigs.SERVER.kinetics.crushingDamage.get();
if (processingEntity instanceof LivingEntity) {
if ((((LivingEntity) processingEntity).getHealth() - crusherDamage <= 0) //Takes LivingEntity instances as exception, so it can move them before it would kill them.
&& (((LivingEntity) processingEntity).hurtTime <= 0)) { //This way it can actually output the items to the right spot.
processingEntity.setPosition(entityOutPos.x
, entityOutPos.y
, entityOutPos.z);
}
}
processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource, processingEntity.attackEntityFrom(CrushingWheelTileEntity.damageSource,
AllConfigs.SERVER.kinetics.crushingDamage.get()); crusherDamage);
if (!processingEntity.isAlive()) { if (!processingEntity.isAlive()) {
processingEntity.setPosition(outPos.x + (facing.getAxis() == Axis.X ? .75f * offset : 0f) //This is supposed to move the mobs to the output location processingEntity.setPosition(entityOutPos.x
, outPos.y + (facing.getAxis() == Axis.Y ? .75f * offset : 0f) //So the item drops end up on the other end , entityOutPos.y
, outPos.z + (facing.getAxis() == Axis.Z ? .75f * offset : 0f)); //This, however, does not currently work consistently for non-downwards crushers. , entityOutPos.z);
} }
return; return;
} }

View file

@ -7,7 +7,6 @@ import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
import net.minecraft.util.Direction; import net.minecraft.util.Direction;
import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.AxisAlignedBB;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LootingLevelEvent; import net.minecraftforge.event.entity.living.LootingLevelEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod.EventBusSubscriber; import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
@ -50,14 +49,7 @@ public class CrushingWheelTileEntity extends KineticTileEntity {
public static void crushingIsFortunate(LootingLevelEvent event) { public static void crushingIsFortunate(LootingLevelEvent event) {
if (event.getDamageSource() != damageSource) if (event.getDamageSource() != damageSource)
return; return;
event.setLootingLevel(2); event.setLootingLevel(2); //This does not currently increase mob drops. It seems like this only works for damage done by an entity.
}
@SubscribeEvent
public static void crushingTeleportsEntities(LivingDeathEvent event) {
if (event.getSource() != damageSource)
return;
event.getEntity().setPos(event.getEntity().getX(), Math.floor(event.getEntity().getY()) - .5f, event.getEntity().getZ());
} }
} }