Skip to content

Commit c6b86ba

Browse files
interaction should be reliable now.
1 parent 9e28741 commit c6b86ba

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

src/main/java/train/common/core/handlers/PacketHandler.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222

2323
public class PacketHandler {
2424
private static final IMessageHandler[] HANDLERS = new IMessageHandler[]{
25+
new IMessageHandler<IMessage, IMessage>() {
26+
@Override
27+
public IMessage onMessage(IMessage message, MessageContext ctx) {
28+
return null;
29+
}
30+
},
2531
new IMessageHandler<IMessage, IMessage>() {
2632
@Override
2733
public IMessage onMessage(IMessage message, MessageContext ctx) {
@@ -56,6 +62,8 @@ public static void init(){
5662
Side.SERVER);
5763
Traincraft.keyChannel.registerMessage(HANDLERS[0], PacketRemove.class,
5864
6, Side.SERVER);
65+
Traincraft.keyChannel.registerMessage(HANDLERS[1], PacketInteract.class,
66+
7, Side.SERVER);
5967
Traincraft.rotationChannel.registerMessage(PacketRollingStockRotation.Handler.class,
6068
PacketRollingStockRotation.class, 2, Side.CLIENT);
6169
Traincraft.modChannel.registerMessage(PacketSetJukeboxStreamingUrl.Handler.class,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package train.common.core.network;
2+
3+
import cpw.mods.fml.common.network.simpleimpl.IMessage;
4+
import io.netty.buffer.ByteBuf;
5+
import net.minecraft.client.Minecraft;
6+
import net.minecraft.entity.Entity;
7+
import net.minecraft.entity.player.EntityPlayer;
8+
import net.minecraftforge.common.DimensionManager;
9+
import train.common.api.AbstractTrains;
10+
11+
/**
12+
* <h1>Mount packet</h1>
13+
* This is intended to be a replacement for
14+
* @see net.minecraft.network.play.client.C02PacketUseEntity
15+
* because for whatever reason, the stupid thing refuses to send for our entities.
16+
* @author Eternal Blue Flame
17+
*/
18+
public class PacketInteract implements IMessage {
19+
/**the ID of the entity to dismount from*/
20+
private int entityId, dimensionId, playerId;
21+
22+
public PacketInteract() {}
23+
public PacketInteract(int entityId) {
24+
this.entityId = entityId;
25+
this.dimensionId= Minecraft.getMinecraft().thePlayer.worldObj.provider.dimensionId;
26+
this.playerId=Minecraft.getMinecraft().thePlayer.getEntityId();
27+
28+
}
29+
/**reads the packet on server to get the variables from the Byte Buffer*/
30+
@Override
31+
public void fromBytes(ByteBuf bbuf) {
32+
entityId = bbuf.readInt();
33+
dimensionId=bbuf.readInt();
34+
playerId=bbuf.readInt();
35+
Entity e = DimensionManager.getWorld(dimensionId).getEntityByID(entityId);
36+
Entity p = DimensionManager.getWorld(dimensionId).getEntityByID(playerId);
37+
if (e instanceof AbstractTrains && p instanceof EntityPlayer) {
38+
e.interactFirst((EntityPlayer)p);
39+
}
40+
}
41+
/**puts the variables into a Byte Buffer so they can be sent to server*/
42+
@Override
43+
public void toBytes(ByteBuf bbuf) {
44+
bbuf.writeInt(entityId);
45+
bbuf.writeInt(dimensionId);
46+
bbuf.writeInt(playerId);
47+
}
48+
}

src/main/java/train/common/entity/CollisionBox.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.minecraftforge.fluids.IFluidHandler;
2525
import train.common.Traincraft;
2626
import train.common.api.EntityRollingStock;
27+
import train.common.core.network.PacketInteract;
2728
import train.common.core.network.PacketRemove;
2829

2930

@@ -61,6 +62,10 @@ public String getCommandSenderName() {
6162

6263
@Override
6364
public boolean interactFirst(EntityPlayer p_130002_1_) {
65+
if(worldObj.isRemote){
66+
Traincraft.keyChannel.sendToServer(new PacketInteract(host.getEntityId()));
67+
return true;
68+
}
6469
return host != null && host.interactFirst(p_130002_1_);
6570
}
6671

@@ -82,6 +87,7 @@ public void onUpdate() {
8287
public boolean attackEntityFrom(DamageSource damageSource, float p_70097_2_) {
8388
if(worldObj.isRemote){
8489
Traincraft.keyChannel.sendToServer(new PacketRemove(host.getEntityId(), damageSource==null?-1:damageSource.getEntity().getEntityId()));
90+
return true;
8591
}
8692
return host != null && host.attackEntityFromPart(this, damageSource, p_70097_2_);
8793
}

0 commit comments

Comments
 (0)