From ec63136436efbe3dd543ccb4646c66e8169c2de7 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 3 May 2023 14:15:16 +0200 Subject: [PATCH] the black mesa rail network --- .../hbm/entity/train/EntityRailCarBase.java | 19 ++++++-- .../entity/train/EntityRailCarRidable.java | 43 +++++++++++++++++ .../com/hbm/entity/train/TrainCargoTram.java | 46 +++++++++++++++++++ 3 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/entity/train/EntityRailCarRidable.java create mode 100644 src/main/java/com/hbm/entity/train/TrainCargoTram.java diff --git a/src/main/java/com/hbm/entity/train/EntityRailCarBase.java b/src/main/java/com/hbm/entity/train/EntityRailCarBase.java index f5c800bb0..7099bebde 100644 --- a/src/main/java/com/hbm/entity/train/EntityRailCarBase.java +++ b/src/main/java/com/hbm/entity/train/EntityRailCarBase.java @@ -34,6 +34,16 @@ public abstract class EntityRailCarBase extends Entity { @Override protected void entityInit() { } @Override protected void readEntityFromNBT(NBTTagCompound nbt) { } @Override protected void writeEntityToNBT(NBTTagCompound nbt) { } + + @Override + public boolean canBePushed() { + return true; + } + + @Override + public boolean canBeCollidedWith() { + return !this.isDead; + } @Override public void onUpdate() { @@ -67,10 +77,11 @@ public abstract class EntityRailCarBase extends Entity { Vec3 frontPos = getRelPosAlongRail(anchor, this.getLengthSpan()); Vec3 backPos = getRelPosAlongRail(anchor, -this.getLengthSpan()); - if(frontPos == null) this.derail(); - if(backPos == null) this.derail(); - - if(frontPos != null && backPos != null) this.rotationYaw = generateYaw(frontPos, backPos); + if(frontPos == null || backPos == null) { + this.derail(); + } else { + this.rotationYaw = generateYaw(frontPos, backPos); + } } } } diff --git a/src/main/java/com/hbm/entity/train/EntityRailCarRidable.java b/src/main/java/com/hbm/entity/train/EntityRailCarRidable.java new file mode 100644 index 000000000..837fcceb2 --- /dev/null +++ b/src/main/java/com/hbm/entity/train/EntityRailCarRidable.java @@ -0,0 +1,43 @@ +package com.hbm.entity.train; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public abstract class EntityRailCarRidable extends EntityRailCarBase { + + public EntityRailCarRidable(World world) { + super(world); + } + + @Override + public boolean interactFirst(EntityPlayer player) { + if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != player) { + return true; + } else { + if(!this.worldObj.isRemote) { + player.mountEntity(this); + } + return true; + } + } + + @Override + public void onUpdate() { + super.onUpdate(); + } + + @Override + public void updateRiderPosition() { + + Vec3 offset = getRiderSeatPosition(); + offset.rotateAroundY(this.rotationYaw); + + if(this.riddenByEntity != null) { + this.riddenByEntity.setPosition(this.posX + offset.xCoord, this.posY + offset.yCoord, this.posZ + offset.zCoord); + } + } + + /** Returns a Vec3 showing the relative position from the driver to the core */ + public abstract Vec3 getRiderSeatPosition(); +} diff --git a/src/main/java/com/hbm/entity/train/TrainCargoTram.java b/src/main/java/com/hbm/entity/train/TrainCargoTram.java new file mode 100644 index 000000000..11c89263a --- /dev/null +++ b/src/main/java/com/hbm/entity/train/TrainCargoTram.java @@ -0,0 +1,46 @@ +package com.hbm.entity.train; + +import com.hbm.blocks.rail.IRailNTM.TrackGauge; + +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class TrainCargoTram extends EntityRailCarRidable { + + /* + * + * _________ + * | | \ <-- + * | | |___ + * | | | | | + * _O\|_|_______|__|_____________________________|/O_ + * |____| |____| + * \__________________________________________/ + * '( + )' '( + )' + * + */ + + public TrainCargoTram(World world) { + super(world); + } + + @Override + public double getCurrentSpeed() { + return 0; + } + + @Override + public TrackGauge getGauge() { + return TrackGauge.STANDARD; + } + + @Override + public double getLengthSpan() { + return 2; + } + + @Override + public Vec3 getRiderSeatPosition() { + return Vec3.createVectorHelper(1, 1, 0); + } +}