Fix base TE classes

This commit is contained in:
raoulvdberge
2019-09-12 10:41:16 +02:00
parent 3d0b0324a9
commit f35d001912
4 changed files with 55 additions and 38 deletions

View File

@@ -1,7 +1,10 @@
package com.raoulvdberge.refinedstorage;
import com.raoulvdberge.refinedstorage.container.*;
import com.raoulvdberge.refinedstorage.container.factory.TileContainerFactory;
import net.minecraft.inventory.container.ContainerType;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.registries.ObjectHolder;
public final class RSContainers {
@@ -53,4 +56,8 @@ public final class RSContainers {
public static final ContainerType<ContainerStorageMonitor> STORAGE_MONITOR = null;
@ObjectHolder(RS.ID + ":wireless_transmitter")
public static final ContainerType<ContainerSecurityManager> WIRELESS_TRANSMITTER = null;
public void registerContainers(final RegistryEvent.Register<ContainerType<?>> event) {
event.getRegistry().register(IForgeContainerType.create(new TileContainerFactory<>((ContainerConstructor::new))).setRegistryName(RS.ID, "constructor"));
}
}

View File

@@ -0,0 +1,30 @@
package com.raoulvdberge.refinedstorage.container.factory;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.network.IContainerFactory;
public class TileContainerFactory<C extends Container, T extends TileEntity> implements IContainerFactory<C> {
public interface Provider<C extends Container, T extends TileEntity> {
C create(T tile, PlayerEntity player, int windowId);
}
private Provider<C, T> provider;
public TileContainerFactory(Provider<C, T> provider) {
this.provider = provider;
}
@Override
public C create(int windowId, PlayerInventory inv, PacketBuffer data) {
int x = data.readInt();
int y = data.readInt();
int z = data.readInt();
return this.provider.create((T) inv.player.world.getTileEntity(new BlockPos(x, y, z)), inv.player, windowId);
}
}

View File

@@ -8,6 +8,7 @@ import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.Direction;
import net.minecraftforge.items.IItemHandler;
@@ -20,6 +21,10 @@ public abstract class TileBase extends TileEntity {
protected IDirectionHandler directionHandler = new DirectionHandlerTile();
protected TileDataManager dataManager = new TileDataManager(this);
public TileBase(TileEntityType<?> tileType) {
super(tileType);
}
public void setDirection(Direction direction) {
clientDirection = direction;

View File

@@ -6,18 +6,18 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.ICoverable;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode;
import com.raoulvdberge.refinedstorage.apiimpl.util.OneSixMigrationHelper;
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable;
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import com.raoulvdberge.refinedstorage.tile.direction.DirectionHandlerNetworkNode;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.Direction;
import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.LazyOptional;
import net.minecraftforge.items.IItemHandler;
import javax.annotation.Nonnull;
@@ -31,7 +31,11 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
private N clientNode;
public TileNode() {
private LazyOptional<INetworkNodeProxy<N>> networkNodeProxy = LazyOptional.of(() -> this);
public TileNode(TileEntityType<?> tileType) {
super(tileType);
directionHandler = new DirectionHandlerNetworkNode(this);
dataManager.addWatchedParameter(REDSTONE_MODE);
@@ -62,25 +66,13 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
public void readUpdate(CompoundNBT tag) {
super.readUpdate(tag);
if (getNode() instanceof ICoverable && tag.hasKey(NBT_COVERS)) {
if (getNode() instanceof ICoverable && tag.contains(NBT_COVERS)) {
((ICoverable) getNode()).getCoverManager().readFromNbt(tag.getList(NBT_COVERS, Constants.NBT.TAG_COMPOUND));
}
getNode().setActive(tag.getBoolean(NBT_ACTIVE));
}
private Direction directionToMigrate;
@Override
public void read(CompoundNBT tag) {
super.read(tag);
OneSixMigrationHelper.removalHook();
if (tag.hasKey(NBT_DIRECTION)) {
directionToMigrate = Direction.byIndex(tag.getInteger("Direction"));
}
}
@Override
@Nullable
public IItemHandler getDrops() {
@@ -108,15 +100,6 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
manager.markForSaving();
}
OneSixMigrationHelper.removalHook();
if (directionToMigrate != null) {
((NetworkNode) node).setDirection(directionToMigrate);
directionToMigrate = null;
markDirty();
}
return (N) node;
}
@@ -124,21 +107,13 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
public abstract String getNodeId();
@Nonnull
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable Direction side) {
if (capability == CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY) {
return true;
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap) {
if (cap == CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY) {
return networkNodeProxy.cast();
}
return super.hasCapability(capability, side);
}
@Override
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable Direction side) {
if (capability == CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY) {
return CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY.cast(this);
}
return super.getCapability(capability, side);
return super.getCapability(cap);
}
}