Renamed to oc2r (OpenComputers II: Reimagined) this includes changing the mod id from oc2 to oc2r.

This commit is contained in:
Jackson Abney
2024-06-15 13:41:55 -08:00
parent b5f1104f1e
commit ce4e4de6ed
1172 changed files with 4292 additions and 4289 deletions

View File

@@ -1,156 +0,0 @@
/* SPDX-License-Identifier: MIT */
package li.cil.oc2.common.blockentity;
import li.cil.oc2.api.bus.device.object.Callback;
import li.cil.oc2.api.bus.device.object.DocumentedDevice;
import li.cil.oc2.api.bus.device.object.NamedDevice;
import li.cil.oc2.api.bus.device.object.Parameter;
import li.cil.oc2.api.util.Side;
import li.cil.oc2.common.Constants;
import li.cil.oc2.common.util.HorizontalBlockUtils;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.Mth;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.block.state.BlockState;
import javax.annotation.Nullable;
import java.util.Collection;
import static java.util.Collections.singletonList;
public final class RedstoneInterfaceBlockEntity extends ModBlockEntity implements NamedDevice, DocumentedDevice {
private static final String OUTPUT_TAG_NAME = "output";
private static final String GET_REDSTONE_INPUT = "getRedstoneInput";
private static final String GET_REDSTONE_OUTPUT = "getRedstoneOutput";
private static final String SET_REDSTONE_OUTPUT = "setRedstoneOutput";
private static final String SIDE = "side";
private static final String VALUE = "value";
///////////////////////////////////////////////////////////////////
private final byte[] output = new byte[Constants.BLOCK_FACE_COUNT];
///////////////////////////////////////////////////////////////////
public RedstoneInterfaceBlockEntity(final BlockPos pos, final BlockState state) {
super(BlockEntities.REDSTONE_INTERFACE.get(), pos, state);
}
///////////////////////////////////////////////////////////////////
@Override
protected void saveAdditional(final CompoundTag tag) {
super.saveAdditional(tag);
tag.putByteArray(OUTPUT_TAG_NAME, output);
}
@Override
public void load(final CompoundTag tag) {
super.load(tag);
final byte[] serializedOutput = tag.getByteArray(OUTPUT_TAG_NAME);
System.arraycopy(serializedOutput, 0, output, 0, Math.min(serializedOutput.length, output.length));
}
public int getOutputForDirection(final Direction direction) {
final Direction localDirection = HorizontalBlockUtils.toLocal(getBlockState(), direction);
assert localDirection != null;
return output[localDirection.get3DDataValue()];
}
@Callback(name = GET_REDSTONE_INPUT)
public int getRedstoneInput(@Parameter(SIDE) @Nullable final Side side) {
if (side == null) throw new IllegalArgumentException();
if (level == null) {
return 0;
}
final BlockPos pos = getBlockPos();
final Direction direction = HorizontalBlockUtils.toGlobal(getBlockState(), side);
assert direction != null;
final BlockPos neighborPos = pos.relative(direction);
final ChunkPos chunkPos = new ChunkPos(neighborPos);
if (!level.hasChunk(chunkPos.x, chunkPos.z)) {
return 0;
}
return level.getSignal(neighborPos, direction);
}
@Callback(name = GET_REDSTONE_OUTPUT, synchronize = false)
public int getRedstoneOutput(@Parameter(SIDE) @Nullable final Side side) {
if (side == null) throw new IllegalArgumentException();
final int index = side.getDirection().get3DDataValue();
return output[index];
}
@Callback(name = SET_REDSTONE_OUTPUT)
public void setRedstoneOutput(@Parameter(SIDE) @Nullable final Side side, @Parameter(VALUE) final int value) {
if (side == null) throw new IllegalArgumentException();
final int index = side.getDirection().get3DDataValue();
final byte clampedValue = (byte) Mth.clamp(value, 0, 15);
if (clampedValue == output[index]) {
return;
}
output[index] = clampedValue;
final Direction direction = HorizontalBlockUtils.toGlobal(getBlockState(), side);
if (direction != null) {
notifyNeighbor(direction);
}
setChanged();
}
@Override
public Collection<String> getDeviceTypeNames() {
return singletonList("redstone");
}
@Override
public void getDeviceDocumentation(final DeviceVisitor visitor) {
visitor.visitCallback(GET_REDSTONE_INPUT)
.description("Get the current redstone level received on the specified side. " +
"Note that if the current output level on the specified side is not " +
"zero, this will affect the measured level.\n" +
"Sides may be specified by name or zero-based index. Please note that " +
"the side depends on the orientation of the device.")
.returnValueDescription("the current received level on the specified side.")
.parameterDescription(SIDE, "the side to read the input level from.");
visitor.visitCallback(GET_REDSTONE_OUTPUT)
.description("Get the current redstone level transmitted on the specified side. " +
"This will return the value last set via setRedstoneOutput().\n" +
"Sides may be specified by name or zero-based index. Please note that " +
"the side depends on the orientation of the device.")
.returnValueDescription("the current transmitted level on the specified side.")
.parameterDescription(SIDE, "the side to read the output level from.");
visitor.visitCallback(SET_REDSTONE_OUTPUT)
.description("Set the new redstone level transmitted on the specified side.\n" +
"Sides may be specified by name or zero-based index. Please note that " +
"the side depends on the orientation of the device.")
.parameterDescription(SIDE, "the side to write the output level to.")
.parameterDescription(VALUE, "the output level to set, will be clamped to [0, 15].");
}
///////////////////////////////////////////////////////////////////
private void notifyNeighbor(final Direction direction) {
if (level == null) {
return;
}
level.updateNeighborsAt(getBlockPos(), getBlockState().getBlock());
level.updateNeighborsAt(getBlockPos().relative(direction), getBlockState().getBlock());
}
}