Sorry, I should know better than to forget my code. Update: after adding a bit of code to the controller class (relating to bounding boxes and collision) the controller and ship block go up after a second (possibly just after I mount it, happens automatically) but not back (instead of the seat).
According to:
class com.deb.debmodularships.entities.EntityController's position on side server is [-2475.5, 56.0, 785.5]
class com.deb.debmodularships.entities.EntityController's position on side client is [-2475.5, 56.0, 785.5]
class com.deb.debmodularships.entities.EntityController's position on side server is [-2475.5, 56.0, 785.5]
class com.deb.debmodularships.entities.EntityController's position on side client is [-2475.5, 57.0, 785.5]
it does seem to be a client issue.
Controller(screen, buttons)
package com.deb.debmodularships.entities;
import java.util.UUID;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class EntityController extends Entity {
public EntityShipSeat ShipCSeat = null;
public String ShipCSeatid = "";
public EntityController(World par1World) {
super(par1World);
this.setSize(1, 1);
}
@Override
protected void entityInit() {
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
ShipCSeatid = nbt.getString("ShipCSeatid");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setString("ShipCSeatid", ShipCSeat.getUniqueID().toString());
}
public void onUpdate() {
//System.out.println(this.ShipCSeat);
System.out.println(this.getClass() + "'s position on side " + (this.worldObj.isRemote ? "client" : "server") + " is [" + this.posX + ", " + this.posY + ", " + this.posZ + "]" );
if (ShipCSeat == null && this.ShipCSeatid != "") {
this.worldObj.getLoadedEntityList();
for (int i = 0; i < this.worldObj.getLoadedEntityList().size(); ++i) {
if (this.worldObj.getLoadedEntityList().get(i) instanceof EntityShipSeat) {
EntityShipSeat tested = (EntityShipSeat)this.worldObj.getLoadedEntityList().get(i);
if (UUID.fromString(this.ShipCSeatid).equals(tested.getUniqueID())) {
this.ShipCSeat = (EntityShipSeat)this.worldObj.getLoadedEntityList().get(i);
}
}
}
}
}
@Override
public AxisAlignedBB getCollisionBox(Entity par1Entity)
{
return this.boundingBox;
}
/**
* returns the bounding box for this entity
*/
@Override
public AxisAlignedBB getBoundingBox()
{
return this.boundingBox;
}
@Override
public boolean canBePushed()
{
return false;
}
@Override
public boolean canBeCollidedWith()
{
return true;
}
//IGNORE
@Override
protected void readEntityFromNBT(NBTTagCompound var1) {
// TODO Auto-generated method stub
}
@Override
protected void writeEntityToNBT(NBTTagCompound var1) {
// TODO Auto-generated method stub
}
}
Ship Block (plain)
package com.deb.debmodularships.entities;
import java.util.UUID;
import scala.reflect.internal.Trees.This;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class EntityShipBlock extends Entity {
public EntityController controller = null;
String controllerid = "";
public EntityShipBlock(World par1World) {
super(par1World);
this.setSize(1, 1);
}
@Override
public boolean interactFirst(EntityPlayer player) {
//player.mountEntity(controller.ShipCSeat);
if (this.controller != null && this.controller.ShipCSeat != null) {
System.out.println(this.controller.ShipCSeat);
player.mountEntity(controller.ShipCSeat);
}
return true;
}
@Override
protected void entityInit() {
AxisAlignedBB.getBoundingBox(-0.5d, -0.5d, -0.5d, 0.5d, 0.5d, 0.5d);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.controllerid = nbt.getString("controllerid");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setString("controllerid", this.controller.getUniqueID().toString());
}
public void onUpdate() {
System.out.println(this.getClass() + "'s position on side " + (this.worldObj.isRemote ? "client" : "server") + " is [" + this.posX + ", " + this.posY + ", " + this.posZ + "]" );
if (controller == null && this.controllerid != "") {
this.worldObj.getLoadedEntityList();
for (int i = 0; i < this.worldObj.getLoadedEntityList().size(); ++i) {
if (this.worldObj.getLoadedEntityList().get(i) instanceof EntityController) {
EntityController tested = (EntityController)this.worldObj.getLoadedEntityList().get(i);
if (UUID.fromString(this.controllerid).equals(tested.getUniqueID())) {
this.controller = (EntityController)this.worldObj.getLoadedEntityList().get(i);
}
}
}
}
}
@Override
public AxisAlignedBB getCollisionBox(Entity par1Entity)
{
return this.boundingBox;
}
/**
* returns the bounding box for this entity
*/
@Override
public AxisAlignedBB getBoundingBox()
{
return this.boundingBox;
}
@Override
public boolean canBePushed()
{
return false;
}
@Override
public boolean canBeCollidedWith()
{
return true;
}
@Override
protected void readEntityFromNBT(NBTTagCompound var1) {
// TODO Auto-generated method stub
}
@Override
protected void writeEntityToNBT(NBTTagCompound var1) {
// TODO Auto-generated method stub
}
}
Ship Seat (Short wooly one)
package com.deb.debmodularships.entities;
import net.minecraft.world.World;
public class EntityShipSeat extends EntityShipBlock {
public EntityShipSeat(World par1World) {
super(par1World);
this.setSize(1f, 0.25f);
this.boundingBox.offset(0f, -0.5f, 0f);
}
public double getMountedYOffset() {
return 0.3d;
}
}