aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tectech/mechanics/pipe/PipeActivityMessage.java
blob: a87acf683311bd50b0e63da7d5f34ce1725342f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package tectech.mechanics.pipe;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;

import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import eu.usrv.yamcore.network.client.AbstractClientMessageHandler;
import eu.usrv.yamcore.network.server.AbstractServerMessageHandler;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import io.netty.buffer.ByteBuf;

public class PipeActivityMessage implements IMessage {

    int mPosX;
    int mPosY;
    int mPosZ;
    int mPosD;
    int mActive;

    public PipeActivityMessage() {}

    private PipeActivityMessage(IActivePipe metaTile) {
        IGregTechTileEntity base = metaTile.getBaseMetaTileEntity();
        mPosX = base.getXCoord();
        mPosY = base.getYCoord();
        mPosZ = base.getZCoord();
        mPosD = base.getWorld().provider.dimensionId;
        mActive = metaTile.getActive() ? 1 : 0;
    }

    private PipeActivityMessage(World world, int x, int y, int z, boolean active) {
        mPosX = x;
        mPosY = y;
        mPosZ = z;
        mPosD = world.provider.dimensionId;
        mActive = active ? 1 : 0;
    }

    @Override
    public void fromBytes(ByteBuf buffer) {
        mPosX = buffer.readInt();
        mPosY = buffer.readInt();
        mPosZ = buffer.readInt();
        mPosD = buffer.readInt();
        mActive = buffer.readInt();
    }

    @Override
    public void toBytes(ByteBuf buffer) {
        buffer.writeInt(mPosX);
        buffer.writeInt(mPosY);
        buffer.writeInt(mPosZ);
        buffer.writeInt(mPosD);
        buffer.writeInt(mActive);
    }

    public static class PipeActivityQuery extends PipeActivityMessage {

        public PipeActivityQuery() {}

        public PipeActivityQuery(IActivePipe metaTile) {
            super(metaTile);
        }

        public PipeActivityQuery(World world, int x, int y, int z, boolean active) {
            super(world, x, y, z, active);
        }
    }

    public static class PipeActivityData extends PipeActivityMessage {

        public PipeActivityData() {}

        private PipeActivityData(PipeActivityQuery query) {
            mPosX = query.mPosX;
            mPosY = query.mPosY;
            mPosZ = query.mPosZ;
            mPosD = query.mPosD;
            mActive = query.mActive;
        }

        public PipeActivityData(IActivePipe metaTile) {
            super(metaTile);
        }

        public PipeActivityData(World world, int x, int y, int z, boolean active) {
            super(world, x, y, z, active);
        }
    }

    public static class ClientHandler extends AbstractClientMessageHandler<PipeActivityData> {

        @Override
        public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) {
            if (pPlayer.worldObj.provider.dimensionId == pMessage.mPosD) {
                TileEntity te = pPlayer.worldObj.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ);
                if (te instanceof IGregTechTileEntity gregTile) {
                    IMetaTileEntity meta = gregTile.getMetaTileEntity();
                    if (meta instanceof IActivePipe activePipe) {
                        activePipe.setActive(pMessage.mActive == 1);
                    }
                }
            }
            return null;
        }
    }

    public static class ServerHandler extends AbstractServerMessageHandler<PipeActivityQuery> {

        @Override
        public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) {
            World world = DimensionManager.getWorld(pMessage.mPosD);
            if (world != null) {
                TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ);
                if (te instanceof IGregTechTileEntity gregTile) {
                    IMetaTileEntity meta = gregTile.getMetaTileEntity();
                    if (meta instanceof IActivePipe activePipe) {
                        pMessage.mActive = activePipe.getActive() ? 1 : 0;
                        return new PipeActivityData(pMessage);
                    }
                }
            }
            return null;
        }
    }
}