Access Terraformer
This commit is contained in:
parent
bd89829b88
commit
6261b32e87
11 changed files with 160 additions and 2131 deletions
|
@ -12,6 +12,7 @@ import net.minecraft.inventory.Container;
|
|||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
@ -64,11 +65,7 @@ public interface IMetaTileEntity extends ITurnable, IMachineBlockUpdateable, IRe
|
|||
*/
|
||||
void loadNBTData(NBTTagCompound data);
|
||||
|
||||
/**
|
||||
* If a Cover of that Type can be placed on this Side.
|
||||
* Also Called when the Facing of the Block Changes and a Cover is on said Side.
|
||||
*/
|
||||
boolean allowCoverOnSide(EnumFacing side, int coverId);
|
||||
void receiveCustomData(int dataId, PacketBuffer buf);
|
||||
|
||||
/**
|
||||
* When a Player rightclicks the Facing with a Screwdriver.
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package gregtech.api.interfaces.tileentity;
|
||||
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
|
||||
public interface ICustomDataTile {
|
||||
|
||||
void receiveCustomData(PacketBuffer buf);
|
||||
|
||||
}
|
|
@ -13,7 +13,7 @@ import net.minecraft.util.EnumFacing;
|
|||
* <p/>
|
||||
* This is all you need to connect to the GT Network.
|
||||
* IColoredTileEntity is needed for not connecting differently coloured Blocks to each other.
|
||||
* IHasWorldObjectAndCoords is needed for the InWorld related Stuff. @BaseTileEntity does implement most of that Interface.
|
||||
* IHasWorldObjectAndCoords is needed for the InWorld related Stuff. @TickableTileEntityBase does implement most of that Interface.
|
||||
*/
|
||||
public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAndCoords, IEnergyAcceptor, IEnergyEmitter {
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -4,12 +4,19 @@ import com.google.common.base.Preconditions;
|
|||
import gregtech.api.GregTech_API;
|
||||
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
|
||||
import gregtech.api.interfaces.metatileentity.IMetaTileEntityFactory;
|
||||
import gregtech.api.interfaces.tileentity.ICustomDataTile;
|
||||
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
|
||||
import gregtech.api.net.NetworkHandler;
|
||||
import gregtech.api.net.PacketCustomTileData;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.ISidedInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.server.management.PlayerChunkMapEntry;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
|
@ -18,12 +25,14 @@ import net.minecraftforge.fluids.FluidTankInfo;
|
|||
import net.minecraftforge.fluids.IFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
|
||||
import net.minecraftforge.fluids.capability.wrappers.FluidHandlerWrapper;
|
||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||
import net.minecraftforge.items.CapabilityItemHandler;
|
||||
import net.minecraftforge.items.wrapper.SidedInvWrapper;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class GregtechTileEntity extends BaseTileEntity implements IGregTechTileEntity, ISidedInventory, IFluidHandler {
|
||||
public class GregtechTileEntity extends TickableTileEntityBase implements IGregTechTileEntity, ICustomDataTile, ISidedInventory, IFluidHandler {
|
||||
|
||||
private MetaTileEntity metaTileEntity;
|
||||
|
||||
|
@ -38,7 +47,10 @@ public class GregtechTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
Preconditions.checkArgument(metaTileEntity instanceof MetaTileEntity, "GregtechTileEntity supports only MetaTileEntity child!");
|
||||
this.metaTileEntity = (MetaTileEntity) metaTileEntity;
|
||||
this.metaTileEntity.holder = this;
|
||||
markDirty();
|
||||
if(!worldObj.isRemote) {
|
||||
|
||||
markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -65,8 +77,25 @@ public class GregtechTileEntity extends BaseTileEntity implements IGregTechTileE
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean receiveClientEvent(int id, int type) {
|
||||
return super.receiveClientEvent(id, type);
|
||||
public void receiveCustomData(PacketBuffer buf) {
|
||||
int dataId = buf.readInt();
|
||||
switch (dataId) {
|
||||
case 0:
|
||||
IMetaTileEntityFactory factory = GregTech_API.METATILEENTITY_REGISTRY.getObjectById(buf.readShort());
|
||||
this.metaTileEntity = factory.constructMetaTileEntity();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void writeCustomData(int dataId, Consumer<PacketBuffer> dataWriter) {
|
||||
PacketBuffer packetBuffer = new PacketBuffer(Unpooled.buffer());
|
||||
packetBuffer.writeInt(dataId);
|
||||
dataWriter.accept(packetBuffer);
|
||||
WorldServer worldServer = (WorldServer) worldObj;
|
||||
PlayerChunkMapEntry entry = worldServer.getPlayerChunkMap().getEntry(pos.getX() >> 4, pos.getZ() >> 4);
|
||||
if(entry != null) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -1,17 +1,12 @@
|
|||
package gregtech.api.metatileentity;
|
||||
|
||||
import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
|
||||
import gregtech.api.net.GT_Packet_Block_Event;
|
||||
import gregtech.api.util.GT_Utility;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.ITickable;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import static gregtech.api.GT_Values.NW;
|
||||
|
||||
public abstract class BaseTileEntity extends TileEntity implements IHasWorldObjectAndCoords, ITickable {
|
||||
public abstract class TickableTileEntityBase extends TileEntity implements IHasWorldObjectAndCoords, ITickable {
|
||||
|
||||
private long timer = 0L;
|
||||
|
|
@ -1,17 +1,23 @@
|
|||
package gregtech.api.net;
|
||||
|
||||
import com.google.common.collect.BiMap;
|
||||
import com.google.common.collect.HashBiMap;
|
||||
import gregtech.api.GT_Values;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import gregtech.api.interfaces.tileentity.ICustomDataTile;
|
||||
import io.netty.buffer.Unpooled;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.network.NetHandlerPlayClient;
|
||||
import net.minecraft.network.INetHandler;
|
||||
import net.minecraft.network.NetHandlerPlayServer;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IntIdentityHashBiMap;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraftforge.fml.common.network.FMLEventChannel;
|
||||
import net.minecraftforge.fml.common.network.FMLNetworkEvent;
|
||||
import net.minecraftforge.fml.common.network.NetworkRegistry;
|
||||
import net.minecraftforge.fml.common.network.internal.FMLProxyPacket;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.function.Consumer;
|
||||
|
@ -30,6 +36,11 @@ public class NetworkHandler {
|
|||
T decode(PacketBuffer byteBuf);
|
||||
}
|
||||
|
||||
@FunctionalInterface
|
||||
public interface PacketExecutor<T, R extends INetHandler> {
|
||||
void execute(T packet, R handler);
|
||||
}
|
||||
|
||||
public static final class PacketCodec<T extends Packet> {
|
||||
|
||||
public final PacketEncoder<T> encoder;
|
||||
|
@ -41,10 +52,10 @@ public class NetworkHandler {
|
|||
}
|
||||
}
|
||||
|
||||
public static final HashMap<Class<? extends Packet>, PacketCodec<? extends Packet>> codecMap = new HashMap<>();
|
||||
public static final HashMap<Class<? extends Packet>, Consumer<? extends Packet>> clientExecutors = new HashMap<>();
|
||||
public static final HashMap<Class<? extends Packet>, Consumer<? extends Packet>> serverExecutors = new HashMap<>();
|
||||
public static final IntIdentityHashBiMap<Class<? extends Packet>> packetMap = new IntIdentityHashBiMap<>(10);
|
||||
private static final HashMap<Class<? extends Packet>, PacketCodec<? extends Packet>> codecMap = new HashMap<>();
|
||||
@SideOnly(Side.CLIENT) private static final HashMap<Class<? extends Packet>, PacketExecutor<? extends Packet, NetHandlerPlayClient>> clientExecutors = new HashMap<>();
|
||||
private static final HashMap<Class<? extends Packet>, PacketExecutor<? extends Packet, NetHandlerPlayServer>> serverExecutors = new HashMap<>();
|
||||
private static final IntIdentityHashBiMap<Class<? extends Packet>> packetMap = new IntIdentityHashBiMap<>(10);
|
||||
|
||||
public static FMLEventChannel channel;
|
||||
|
||||
|
@ -53,6 +64,47 @@ public class NetworkHandler {
|
|||
public static void init() {
|
||||
channel = NetworkRegistry.INSTANCE.newEventDrivenChannel(GT_Values.MODID);
|
||||
channel.register(new NetworkHandler());
|
||||
|
||||
registerPacket(0, PacketCustomTileData.class, new PacketCodec<>(
|
||||
(packet, buf) -> {
|
||||
buf.writeBlockPos(packet.tileEntityPos);
|
||||
byte[] data = packet.payload.array();
|
||||
buf.writeInt(data.length);
|
||||
buf.writeBytes(data);
|
||||
},
|
||||
(buf) -> new PacketCustomTileData(
|
||||
buf.readBlockPos(),
|
||||
new PacketBuffer(buf.readBytes(buf.readInt()))
|
||||
)
|
||||
));
|
||||
|
||||
if(FMLCommonHandler.instance().getSide().isClient()) {
|
||||
initClient();
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private static void initClient() {
|
||||
registerClientExecutor(PacketCustomTileData.class, (packet, handler) -> {
|
||||
TileEntity tileEntity = Minecraft.getMinecraft().theWorld.getTileEntity(packet.tileEntityPos);
|
||||
if(tileEntity instanceof ICustomDataTile) {
|
||||
((ICustomDataTile) tileEntity).receiveCustomData(packet.payload);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static <T extends Packet> void registerPacket(int packetId, Class<T> packetClass, PacketCodec<T> codec) {
|
||||
packetMap.put(packetClass, packetId);
|
||||
codecMap.put(packetClass, codec);
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public static <T extends Packet> void registerClientExecutor(Class<T> packet, PacketExecutor<T, NetHandlerPlayClient> executor) {
|
||||
clientExecutors.put(packet, executor);
|
||||
}
|
||||
|
||||
public static <T extends Packet> void registerServerExecutor(Class<T> packet, PacketExecutor<T, NetHandlerPlayServer> executor) {
|
||||
serverExecutors.put(packet, executor);
|
||||
}
|
||||
|
||||
public static FMLProxyPacket packet2proxy(Packet packet) {
|
||||
|
@ -71,11 +123,12 @@ public class NetworkHandler {
|
|||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void onClientPacket(FMLNetworkEvent.ClientCustomPacketEvent event) {
|
||||
Packet packet = proxy2packet(event.getPacket());
|
||||
if(clientExecutors.containsKey(packet.getClass())) {
|
||||
Consumer<Packet> c = (Consumer<Packet>) clientExecutors.get(packet.getClass());
|
||||
c.accept(packet);
|
||||
PacketExecutor<Packet, NetHandlerPlayClient> executor = (PacketExecutor<Packet, NetHandlerPlayClient>) clientExecutors.get(packet.getClass());
|
||||
executor.execute(packet, (NetHandlerPlayClient) event.getHandler());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,8 +136,8 @@ public class NetworkHandler {
|
|||
public void onServerPacket(FMLNetworkEvent.ServerCustomPacketEvent event) {
|
||||
Packet packet = proxy2packet(event.getPacket());
|
||||
if(serverExecutors.containsKey(packet.getClass())) {
|
||||
Consumer<Packet> c = (Consumer<Packet>) serverExecutors.get(packet.getClass());
|
||||
c.accept(packet);
|
||||
PacketExecutor<Packet, NetHandlerPlayServer> executor = (PacketExecutor<Packet, NetHandlerPlayServer>) serverExecutors.get(packet.getClass());
|
||||
executor.execute(packet, (NetHandlerPlayServer) event.getHandler());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
42
src/main/java/gregtech/api/net/PacketCustomTileData.java
Normal file
42
src/main/java/gregtech/api/net/PacketCustomTileData.java
Normal file
|
@ -0,0 +1,42 @@
|
|||
package gregtech.api.net;
|
||||
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
|
||||
public class PacketCustomTileData implements NetworkHandler.Packet {
|
||||
|
||||
public final BlockPos tileEntityPos;
|
||||
public final PacketBuffer payload;
|
||||
|
||||
public PacketCustomTileData(BlockPos tileEntityPos, PacketBuffer payload) {
|
||||
this.tileEntityPos = tileEntityPos;
|
||||
this.payload = payload;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
|
||||
PacketCustomTileData that = (PacketCustomTileData) o;
|
||||
|
||||
if (!tileEntityPos.equals(that.tileEntityPos)) return false;
|
||||
return payload.equals(that.payload);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = tileEntityPos.hashCode();
|
||||
result = 31 * result + payload.hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "PacketCustomTileData{" +
|
||||
"tileEntityPos=" + tileEntityPos +
|
||||
", payload=" + payload.hashCode() +
|
||||
'}';
|
||||
}
|
||||
|
||||
}
|
|
@ -10,7 +10,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
|
|||
import gregtech.api.items.GenericBlock;
|
||||
import gregtech.api.metatileentity.BaseMetaPipeEntity;
|
||||
import gregtech.api.metatileentity.BaseMetaTileEntity;
|
||||
import gregtech.api.metatileentity.BaseTileEntity;
|
||||
import gregtech.api.metatileentity.TickableTileEntityBase;
|
||||
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
|
||||
import gregtech.api.objects.GT_RenderedTexture;
|
||||
import gregtech.api.util.GT_Log;
|
||||
|
@ -91,8 +91,8 @@ public class BlockMachines extends GenericBlock implements IDebugableBlock, ITil
|
|||
@Override
|
||||
public void onNeighborChange(IBlockAccess world, BlockPos pos, BlockPos neighbor) {
|
||||
TileEntity tileEntity = world.getTileEntity(pos);
|
||||
if ((tileEntity instanceof BaseTileEntity)) {
|
||||
((BaseTileEntity) tileEntity).onAdjacentBlockChange(neighbor.getX(), neighbor.getY(), neighbor.getZ());
|
||||
if ((tileEntity instanceof TickableTileEntityBase)) {
|
||||
((TickableTileEntityBase) tileEntity).onAdjacentBlockChange(neighbor.getX(), neighbor.getY(), neighbor.getZ());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import gregtech.api.gui.GT_GUIContainer_BasicTank;
|
|||
import gregtech.api.interfaces.ITexture;
|
||||
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
|
||||
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
|
||||
import gregtech.api.metatileentity.BaseTileEntity;
|
||||
import gregtech.api.metatileentity.TickableTileEntityBase;
|
||||
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
|
||||
import gregtech.api.objects.GT_RenderedTexture;
|
||||
import gregtech.api.util.GT_ModHandler;
|
||||
|
@ -115,8 +115,8 @@ public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_Hatch {
|
|||
super.onPostTick(aBaseMetaTileEntity, aTick);
|
||||
if (getBaseMetaTileEntity().isServerSide()) {
|
||||
this.mPumpTimer -= 1;
|
||||
if ((getBaseMetaTileEntity() instanceof BaseTileEntity)) {
|
||||
((BaseTileEntity) getBaseMetaTileEntity()).ignoreUnloadedChunks = false;
|
||||
if ((getBaseMetaTileEntity() instanceof TickableTileEntityBase)) {
|
||||
((TickableTileEntityBase) getBaseMetaTileEntity()).ignoreUnloadedChunks = false;
|
||||
}
|
||||
this.doTickProfilingInThisTick = true;
|
||||
this.mPumpCountBelow = 0;
|
||||
|
|
2
src/main/resources/gregtech_at.cfg
Normal file
2
src/main/resources/gregtech_at.cfg
Normal file
|
@ -0,0 +1,2 @@
|
|||
#PlayerChunkMapEntry
|
||||
public net.minecraft.server.management.PlayerChunkMapEntry field_187283_c #players
|
Loading…
Reference in a new issue