Pull out some forge stuff to make it less painful to maybe switch to fabric later.
This commit is contained in:
20
src/main/java/li/cil/oc2/common/util/NBTTagIds.java
Normal file
20
src/main/java/li/cil/oc2/common/util/NBTTagIds.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package li.cil.oc2.common.util;
|
||||
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
|
||||
public final class NBTTagIds {
|
||||
public static final int TAG_END = Constants.NBT.TAG_END;
|
||||
public static final int TAG_BYTE = Constants.NBT.TAG_BYTE;
|
||||
public static final int TAG_SHORT = Constants.NBT.TAG_SHORT;
|
||||
public static final int TAG_INT = Constants.NBT.TAG_INT;
|
||||
public static final int TAG_LONG = Constants.NBT.TAG_LONG;
|
||||
public static final int TAG_FLOAT = Constants.NBT.TAG_FLOAT;
|
||||
public static final int TAG_DOUBLE = Constants.NBT.TAG_DOUBLE;
|
||||
public static final int TAG_BYTE_ARRAY = Constants.NBT.TAG_BYTE_ARRAY;
|
||||
public static final int TAG_STRING = Constants.NBT.TAG_STRING;
|
||||
public static final int TAG_LIST = Constants.NBT.TAG_LIST;
|
||||
public static final int TAG_COMPOUND = Constants.NBT.TAG_COMPOUND;
|
||||
public static final int TAG_INT_ARRAY = Constants.NBT.TAG_INT_ARRAY;
|
||||
public static final int TAG_LONG_ARRAY = Constants.NBT.TAG_LONG_ARRAY;
|
||||
public static final int TAG_ANY_NUMERIC = Constants.NBT.TAG_ANY_NUMERIC;
|
||||
}
|
||||
40
src/main/java/li/cil/oc2/common/util/TileEntities.java
Normal file
40
src/main/java/li/cil/oc2/common/util/TileEntities.java
Normal file
@@ -0,0 +1,40 @@
|
||||
package li.cil.oc2.common.util;
|
||||
|
||||
import li.cil.oc2.api.bus.DeviceBusElement;
|
||||
import li.cil.oc2.common.capabilities.Capabilities;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraftforge.common.capabilities.Capability;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public final class TileEntities {
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
private static final Map<Class<?>, Capability<?>> CAPABILITIES = Util.make(() -> {
|
||||
final HashMap<Class<?>, Capability<?>> map = new HashMap<>();
|
||||
|
||||
map.put(DeviceBusElement.class, Capabilities.DEVICE_BUS_ELEMENT_CAPABILITY);
|
||||
|
||||
return map;
|
||||
});
|
||||
|
||||
public static <T> Optional<T> getInterfaceForSide(final TileEntity tileEntity, final Class<T> type, @Nullable final Direction side) {
|
||||
final Capability<?> capability = CAPABILITIES.get(type);
|
||||
if (capability == null) {
|
||||
LOGGER.warn("Trying to access type with no known capability: [{}]", type);
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
final LazyOptional<T> value = tileEntity.getCapability(capability, side).cast();
|
||||
|
||||
//noinspection ConstantConditions Can be null because we pass in null.
|
||||
return Optional.ofNullable(value.orElse(null));
|
||||
}
|
||||
}
|
||||
7
src/main/java/li/cil/oc2/common/util/package-info.java
Normal file
7
src/main/java/li/cil/oc2/common/util/package-info.java
Normal file
@@ -0,0 +1,7 @@
|
||||
@ParametersAreNonnullByDefault
|
||||
@MethodsReturnNonnullByDefault
|
||||
package li.cil.oc2.common.util;
|
||||
|
||||
import mcp.MethodsReturnNonnullByDefault;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
@@ -7,7 +7,7 @@ import li.cil.oc2.api.bus.DeviceBusElement;
|
||||
import li.cil.oc2.api.device.Device;
|
||||
import li.cil.oc2.api.device.DeviceMethod;
|
||||
import li.cil.oc2.api.device.DeviceMethodParameter;
|
||||
import li.cil.oc2.common.capabilities.Capabilities;
|
||||
import li.cil.oc2.common.util.TileEntities;
|
||||
import li.cil.sedna.api.device.Steppable;
|
||||
import li.cil.sedna.api.device.serial.SerialDevice;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@@ -15,7 +15,6 @@ import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.LazyOptional;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.ByteArrayInputStream;
|
||||
@@ -149,18 +148,18 @@ public class DeviceBusControllerImpl implements DeviceBusController, Steppable {
|
||||
continue;
|
||||
}
|
||||
|
||||
final LazyOptional<DeviceBusElement> capability = tileEntity.getCapability(Capabilities.DEVICE_BUS_ELEMENT_CAPABILITY, edge.face);
|
||||
final Optional<DeviceBusElement> capability = TileEntities.getInterfaceForSide(tileEntity, DeviceBusElement.class, edge.face);
|
||||
if (capability.isPresent()) {
|
||||
if (busPositions.add(edge.position) && busPositions.size() > MAX_BUS_ELEMENT_COUNT) {
|
||||
elements.clear();
|
||||
return State.TOO_COMPLEX;
|
||||
}
|
||||
|
||||
final DeviceBusElement element = capability.orElseThrow(AssertionError::new);
|
||||
final DeviceBusElement element = capability.get();
|
||||
elements.add(element);
|
||||
|
||||
for (final Direction face : faces) {
|
||||
final LazyOptional<DeviceBusElement> otherCapability = tileEntity.getCapability(Capabilities.DEVICE_BUS_ELEMENT_CAPABILITY, face);
|
||||
final Optional<DeviceBusElement> otherCapability = TileEntities.getInterfaceForSide(tileEntity, DeviceBusElement.class, face);
|
||||
otherCapability.ifPresent(otherElement -> {
|
||||
final boolean isConnectedToIncomingEdge = otherElement == element;
|
||||
if (!isConnectedToIncomingEdge) {
|
||||
@@ -463,20 +462,16 @@ public class DeviceBusControllerImpl implements DeviceBusController, Steppable {
|
||||
methodJson.add("parameters", parametersJson);
|
||||
|
||||
final DeviceMethodParameter[] parameters = method.getParameters();
|
||||
if (parameters != null) {
|
||||
for (final DeviceMethodParameter parameter : parameters) {
|
||||
final JsonObject parameterJson = new JsonObject();
|
||||
for (final DeviceMethodParameter parameter : parameters) {
|
||||
final JsonObject parameterJson = new JsonObject();
|
||||
|
||||
parameter.getName().ifPresent(s -> parameterJson.addProperty("name", s));
|
||||
parameter.getDescription().ifPresent(s -> parameterJson.addProperty("description", s));
|
||||
parameter.getName().ifPresent(s -> parameterJson.addProperty("name", s));
|
||||
parameter.getDescription().ifPresent(s -> parameterJson.addProperty("description", s));
|
||||
|
||||
final Class<?> type = parameter.getType();
|
||||
if (type != null) {
|
||||
parameterJson.addProperty("type", type.getSimpleName());
|
||||
}
|
||||
final Class<?> type = parameter.getType();
|
||||
parameterJson.addProperty("type", type.getSimpleName());
|
||||
|
||||
parametersJson.add(parameterJson);
|
||||
}
|
||||
parametersJson.add(parameterJson);
|
||||
}
|
||||
|
||||
return methodJson;
|
||||
|
||||
@@ -4,9 +4,9 @@ import li.cil.ceres.Ceres;
|
||||
import li.cil.ceres.api.DeserializationVisitor;
|
||||
import li.cil.ceres.api.SerializationException;
|
||||
import li.cil.ceres.api.SerializationVisitor;
|
||||
import li.cil.oc2.common.util.NBTTagIds;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.nbt.ListNBT;
|
||||
import net.minecraftforge.common.util.Constants;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
@@ -319,7 +319,7 @@ public final class NBTSerialization {
|
||||
} else if (type.isArray()) {
|
||||
final Class<?> componentType = type.getComponentType();
|
||||
final li.cil.ceres.api.Serializer<?> serializer = Ceres.getSerializer(componentType);
|
||||
final ListNBT listNBT = nbt.getList(name, Constants.NBT.TAG_COMPOUND);
|
||||
final ListNBT listNBT = nbt.getList(name, NBTTagIds.TAG_COMPOUND);
|
||||
final int length = listNBT.size();
|
||||
Object[] data = (Object[]) into;
|
||||
if (data == null || data.length != length) {
|
||||
|
||||
Reference in New Issue
Block a user