hovering, flying npc

This commit is contained in:
Sen 2025-03-20 20:54:49 +01:00
parent 5300c9e4fc
commit 103e4d35f5
7 changed files with 111 additions and 28 deletions

View file

@ -43,8 +43,16 @@ public abstract class EntityFlyingNPC extends EntityNPC
{ {
} }
public boolean isFlying() {
return true;
}
public void moveEntityWithHeading(float strafe, float forward) public void moveEntityWithHeading(float strafe, float forward)
{ {
if(this.isPlayer()) {
super.moveEntityWithHeading(strafe, forward);
return;
}
if (this.isInLiquid()) if (this.isInLiquid())
{ {
this.moveFlying(strafe, forward, 0.02F); this.moveFlying(strafe, forward, 0.02F);

View file

@ -2,6 +2,7 @@ package game.entity.npc;
import game.entity.attributes.Attributes; import game.entity.attributes.Attributes;
import game.entity.types.EntityLiving; import game.entity.types.EntityLiving;
import game.packet.CPacketAction;
import game.world.World; import game.world.World;
public abstract class EntityHoveringNPC extends EntityNPC public abstract class EntityHoveringNPC extends EntityNPC
@ -9,6 +10,8 @@ public abstract class EntityHoveringNPC extends EntityNPC
private float heightOffset = 0.5F; private float heightOffset = 0.5F;
private int heightOffsetUpdateTime; private int heightOffsetUpdateTime;
private boolean serverHoverState;
public EntityHoveringNPC(World worldIn) public EntityHoveringNPC(World worldIn)
{ {
super(worldIn); super(worldIn);
@ -34,6 +37,16 @@ public abstract class EntityHoveringNPC extends EntityNPC
this.getEntityAttribute(Attributes.FOLLOW_RANGE).setBaseValue(32.0D); this.getEntityAttribute(Attributes.FOLLOW_RANGE).setBaseValue(32.0D);
} }
public boolean isHovering()
{
return this.getFlag(6);
}
public void setHovering(boolean hover)
{
this.setFlag(6, hover);
}
// protected void entityInit() // protected void entityInit()
// { // {
// super.entityInit(); // super.entityInit();
@ -77,12 +90,46 @@ public abstract class EntityHoveringNPC extends EntityNPC
// return 1.0F; // return 1.0F;
// } // }
public void onUpdateWalkingPlayer()
{
boolean flag = this.isHovering();
if (flag != this.serverHoverState)
{
if (flag)
{
this.sendQueue.addToSendQueue(new CPacketAction(CPacketAction.Action.START_HOVER));
}
else
{
this.sendQueue.addToSendQueue(new CPacketAction(CPacketAction.Action.STOP_HOVER));
}
this.serverHoverState = flag;
}
super.onUpdateWalkingPlayer();
}
public void onLivingUpdate() public void onLivingUpdate()
{ {
if (!this.onGround && this.motionY < 0.0D) if(this.sendQueue != null) {
if(this.gm.jump && this.gm.sprint && this.gm.moveForward == 0.0f && this.gm.moveStrafe == 0.0f)
this.setHovering(true);
if(this.isFlying() || (!this.gm.jump && this.gm.sneak && this.onGround))
this.setHovering(false);
}
if (!this.onGround && this.motionY < 0.0D && (!this.isPlayer() || (!this.isFlying() && this.isHovering() && !this.jumping)))
{ {
if(this.isPlayer() && this.isSneaking())
this.motionY = -0.1D;
else
this.motionY *= 0.6D; this.motionY *= 0.6D;
} }
if (!this.onGround && this.isPlayer() && !this.isFlying() && !this.isSneaking() && this.isHovering())
{
this.motionY = this.jumping ? 0.1D : -0.025D;
}
// if (this.worldObj.client) // if (this.worldObj.client)
// { // {
@ -100,6 +147,11 @@ public abstract class EntityHoveringNPC extends EntityNPC
super.onLivingUpdate(); super.onLivingUpdate();
} }
protected float getJumpUpwardsMotion()
{
return !this.isPlayer() ? super.getJumpUpwardsMotion() : (super.getJumpUpwardsMotion());
}
protected void updateAITasks() protected void updateAITasks()
{ {
// if (Config.blazeWaterDamage && this.isWet()) // if (Config.blazeWaterDamage && this.isWet())

View file

@ -199,7 +199,7 @@ public abstract class EntityNPC extends EntityLiving
public NetHandlerPlayServer connection; public NetHandlerPlayServer connection;
public NetHandlerPlayClient sendQueue; public NetHandlerPlayClient sendQueue;
private Game gm; protected Game gm;
public InventoryPlayer inventory; public InventoryPlayer inventory;
protected InventoryWarpChest warpChest; protected InventoryWarpChest warpChest;
@ -4634,4 +4634,13 @@ public abstract class EntityNPC extends EntityLiving
} }
return super.getItem(); return super.getItem();
} }
public boolean isHovering()
{
return false;
}
public void setHovering(boolean hover)
{
}
} }

View file

@ -24,13 +24,18 @@ public class GuiConnect extends Gui implements Textbox.Callback {
private Label userLabel; private Label userLabel;
private Label passLabel; private Label passLabel;
private Label accLabel; private Label accLabel;
private String lastAddr = "";
private int lastPort = Config.PORT;
private String lastUser = "";
private String lastPass = "";
private String lastAcc = "";
public void init(int width, int height) { public void init(int width, int height) {
this.addrBox = this.add(new Textbox(0, 20, 410, 24, 128, true, this, "")); this.addrBox = this.add(new Textbox(0, 20, 400, 24, 128, true, this, this.lastAddr));
this.portBox = this.add(new Textbox(414, 20, 66, 24, 5, true, this, "")); this.portBox = this.add(new Textbox(404, 20, 76, 24, 5, true, this, "" + this.lastPort));
this.userBox = this.add(new Textbox(0, 70, 220, 24, NetHandlerPlayServer.MAX_USER_LENGTH, true, this, NetHandlerPlayServer.VALID_USER, "")); this.userBox = this.add(new Textbox(0, 70, 220, 24, NetHandlerPlayServer.MAX_USER_LENGTH, true, this, NetHandlerPlayServer.VALID_USER, this.lastUser));
this.passBox = this.add(new Textbox(0, 120, 480, 24, NetHandlerPlayServer.MAX_PASS_LENGTH, true, this, "")); this.passBox = this.add(new Textbox(0, 120, 480, 24, NetHandlerPlayServer.MAX_PASS_LENGTH, true, this, this.lastPass));
this.accBox = this.add(new Textbox(0, 170, 480, 24, NetHandlerPlayServer.MAX_PASS_LENGTH, true, this, "")); this.accBox = this.add(new Textbox(0, 170, 480, 24, NetHandlerPlayServer.MAX_PASS_LENGTH, true, this, this.lastAcc));
this.add(new ActButton(0, 220, 480, 24, new ActButton.Callback() { this.add(new ActButton(0, 220, 480, 24, new ActButton.Callback() {
public void use(ActButton elem, ActButton.Mode action) { public void use(ActButton elem, ActButton.Mode action) {
GuiConnect.this.connect(); GuiConnect.this.connect();
@ -63,7 +68,8 @@ public class GuiConnect extends Gui implements Textbox.Callback {
} }
int port = -1; int port = -1;
if(this.portBox.getText().isEmpty()) { if(this.portBox.getText().isEmpty()) {
port = Config.PORT; this.portLabel.setText(TextColor.RED + "Port");
return;
} }
else { else {
try { try {
@ -83,6 +89,11 @@ public class GuiConnect extends Gui implements Textbox.Callback {
} }
String pass = this.passBox.getText(); String pass = this.passBox.getText();
String acc = this.accBox.getText(); String acc = this.accBox.getText();
this.lastAddr = addr;
this.lastPort = port;
this.lastUser = user;
this.lastPass = pass;
this.lastAcc = acc;
this.gm.connect(addr, port, user, pass, acc); this.gm.connect(addr, port, user, pass, acc);
} }

View file

@ -210,19 +210,20 @@ public class GuiCreate extends Gui implements ActButton.Callback, Textbox.Callba
UniverseRegistry.clear(); UniverseRegistry.clear();
this.alreadyGenerated = false; this.alreadyGenerated = false;
this.dimension = Integer.MAX_VALUE; this.dimension = Integer.MAX_VALUE;
this.createButton = this.add(new ActButton(width / 2 - 155, height - 28, 150, 20, (ActButton.Callback)this, "Neue Welt erstellen")); this.createButton = this.add(new ActButton(0, 340, 160, 24, (ActButton.Callback)this, "Welt erstellen"));
this.add(new ActButton(width / 2 + 5, height - 28, 150, 20, (Gui)GuiWorlds.INSTANCE, "Abbrechen")); this.add(new ActButton(164, 340, 160, 24, (Gui)GuiWorlds.INSTANCE, "Abbrechen"));
this.dimButton = this.add(new ActButton(width / 2 - 155, 220, 310, 20, (ActButton.Callback)this, "")); this.dimButton = this.add(new ActButton(0, 220, 324, 24, (ActButton.Callback)this, ""));
this.worldNameField = this.add(new Textbox(width / 2 - 100, 60, 200, 20, 256, true, this, GuiWorlds.VALID_FILE, "")); this.worldNameField = this.add(new Textbox(20, 40, 284, 24, 256, true, this, GuiWorlds.VALID_FILE, ""));
this.worldNameField.setSelected(); this.worldNameField.setSelected();
this.worldSeedField = this.add(new Textbox(width / 2 - 100, 136, 200, 20, 256, true, this, "")); this.worldSeedField = this.add(new Textbox(20, 140, 284, 24, 256, true, this, ""));
this.worldUserField = this.add(new Textbox(width / 2 - 100, 98, 200, 20, NetHandlerPlayServer.MAX_USER_LENGTH, true, this, NetHandlerPlayServer.VALID_USER, "")); this.worldUserField = this.add(new Textbox(20, 90, 284, 24, NetHandlerPlayServer.MAX_USER_LENGTH, true, this, NetHandlerPlayServer.VALID_USER, ""));
this.createButton.enabled = false; this.createButton.enabled = false;
this.actionLabel = this.add(new Label(width / 2 - 100, 49, 200, 20, this.getFolderDesc(), true)); this.actionLabel = this.add(new Label(20, 20, 284, 20, this.getFolderDesc(), true));
this.userLabel = this.add(new Label(width / 2 - 100, 87, 200, 20, this.getUserDesc(), true)); this.userLabel = this.add(new Label(20, 70, 284, 20, this.getUserDesc(), true));
this.seed = this.add(new Label(width / 2 - 100, 125, 200, 20, "", true)); this.seed = this.add(new Label(20, 120, 284, 20, "", true));
this.decoded = this.add(new Label(width / 2 - 100, 160, 200, 20, "", true)); this.decoded = this.add(new Label(20, 164, 284, 20, "", true));
this.descLines = this.add(new TransparentBox(width / 2 - 153, 242, 306, 160, "")); this.descLines = this.add(new TransparentBox(0, 244, 324, 160, ""));
this.shift();
this.setDimButton(); this.setDimButton();
} }
@ -302,14 +303,6 @@ public class GuiCreate extends Gui implements ActButton.Callback, Textbox.Callba
} }
private String getFolderDesc() { private String getFolderDesc() {
// FontRenderer.drawStringWithShadow("Startwert [" + this.seed + "]", this.width / 2 - 100, 125, -6250336);
// FontRenderer.drawStringWithShadow("Dekodiert: " + this.decoded, this.width / 2 - 100, 160, -6250336);
// FontRenderer.drawStringWithShadow(, this.width / 2 - 100, 49, -6250336);
// FontRenderer.drawStringWithShadow((this.worldUserField.getText().isEmpty() ? TextColor.DARK_RED : "") + "Spielername", this.width / 2 - 100, 87, -6250336);
//
// for(int z = 1; z < this.descLines.length; z++) {
// FontRenderer.drawStringWithShadow(this.descLines[z], this.width / 2 - 153, 242 + (z - 1) * (FontRenderer.FONT_HEIGHT + 1), -6250336);
// }
return (this.worldNameField.getText().trim().isEmpty() || this.fileExists ? TextColor.DRED : "") return (this.worldNameField.getText().trim().isEmpty() || this.fileExists ? TextColor.DRED : "")
+ "Ordner der Welt" + (this.fileExists ? " - Existiert bereits" : ""); + "Ordner der Welt" + (this.fileExists ? " - Existiert bereits" : "");
} }

View file

@ -2551,6 +2551,14 @@ public class NetHandlerPlayServer extends NetHandler implements ICrafting, Scrip
this.entity.setSprinting(false); this.entity.setSprinting(false);
break; break;
case START_HOVER:
this.entity.setHovering(true);
break;
case STOP_HOVER:
this.entity.setHovering(false);
break;
// case STOP_SLEEPING: // case STOP_SLEEPING:
// this.playerEntity.wakeUpPlayer(); // this.playerEntity.wakeUpPlayer();
// this.hasMoved = false; // this.hasMoved = false;

View file

@ -62,6 +62,8 @@ public class CPacketAction implements Packet<NetHandlerPlayServer>
// STOP_SLEEPING, // STOP_SLEEPING,
START_SPRINTING, START_SPRINTING,
STOP_SPRINTING, STOP_SPRINTING,
START_HOVER,
STOP_HOVER,
RIDING_JUMP, RIDING_JUMP,
OPEN_INVENTORY, OPEN_INVENTORY,
START_FLYING, START_FLYING,