Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.ItemStack;
import li.cil.oc2.common.vm.tablet.TabletState;
import net.minecraft.world.level.block.entity.BlockEntity;

import java.util.Optional;
Expand All @@ -28,6 +29,13 @@ public interface ItemDeviceQuery {
*/
Optional<Entity> getContainerEntity();

/**
* The {@link TabletState} that holds the item this query is for.
*
* @return the {@link TabletState} hosting the device, if any.
*/
Optional<TabletState> getContainerTabletState();

/**
* The item stack this query is performed for.
*
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/li/cil/oc2/client/ClientSetup.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

package li.cil.oc2.client;

import li.cil.oc2.api.API;
import li.cil.oc2.client.gui.*;
import li.cil.oc2.client.item.CustomItemColors;
import li.cil.oc2.client.item.CustomItemModelProperties;
Expand All @@ -17,8 +18,13 @@
import li.cil.oc2.common.config.Config;
import li.cil.oc2.common.container.Containers;
import li.cil.oc2.common.entity.Entities;
import li.cil.oc2.common.item.Items;
import li.cil.oc2.common.item.TabletItem;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderers;
import net.minecraft.client.renderer.item.ItemProperties;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.client.event.EntityRenderersEvent;
import net.minecraftforge.client.event.ModelEvent.RegisterGeometryLoaders;
import net.minecraftforge.client.event.RegisterColorHandlersEvent;
Expand Down Expand Up @@ -53,8 +59,15 @@ public static void handleSetupEvent(final FMLClientSetupEvent event) {
MenuScreens.register(Containers.MONITOR.get(), MonitorDisplayScreen::new);
MenuScreens.register(Containers.ROBOT.get(), RobotContainerScreen::new);
MenuScreens.register(Containers.ROBOT_TERMINAL.get(), RobotTerminalScreen::new);
MenuScreens.register(Containers.TABLET.get(), TabletContainerScreen::new);
MenuScreens.register(Containers.TABLET_TERMINAL.get(), TabletTerminalScreen::new);
MenuScreens.register(Containers.NETWORK_TUNNEL.get(), NetworkTunnelScreen::new);

ItemProperties.register(Items.TABLET.get(), ResourceLocation.fromNamespaceAndPath(API.MOD_ID, TabletItem.TABLET_ON_TAG_NAME), (stack, level, living, id) -> {
if (stack.getTag() == null) return 0.0F;
return stack.getTag().getBoolean(TabletItem.TABLET_ON_TAG_NAME) ? 1.0F : 0.0F;
});

// We need to register this manually, because static init throws errors when running data generation.
MinecraftForge.EVENT_BUS.register(ProjectorDepthRenderer.class);
});
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/li/cil/oc2/client/TabletStateCache.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/* SPDX-License-Identifier: MIT */

package li.cil.oc2.client;

import li.cil.oc2.common.vm.tablet.TabletState;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class TabletStateCache {
private static final Map<UUID, TabletState> CACHE = new HashMap<>();

public static TabletState getOrCreateTabletState(UUID id) {
if (CACHE.containsKey(id)) {
return CACHE.get(id);
}

TabletState state = new TabletState(id, true);
CACHE.put(id, state);
return state;
}

public static void remove(UUID id) {
CACHE.remove(id);
}
}
28 changes: 28 additions & 0 deletions src/main/java/li/cil/oc2/client/gui/TabletContainerScreen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/* SPDX-License-Identifier: MIT */

package li.cil.oc2.client.gui;

import li.cil.oc2.common.container.TabletInventoryContainer;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public final class TabletContainerScreen extends AbstractMachineInventoryScreen<TabletInventoryContainer> {
public TabletContainerScreen(final TabletInventoryContainer container, final Inventory inventory, final Component title) {
super(container, inventory, title);
imageWidth = Sprites.COMPUTER_CONTAINER.width;
imageHeight = Sprites.COMPUTER_CONTAINER.height;
inventoryLabelY = imageHeight - 94;
}

///////////////////////////////////////////////////////////////////

@Override
protected void renderBg(final GuiGraphics graphics, final float partialTicks, final int mouseX, final int mouseY) {
super.renderBg(graphics, partialTicks, mouseX, mouseY);
Sprites.COMPUTER_CONTAINER.draw(graphics, leftPos, topPos);
}
}
29 changes: 29 additions & 0 deletions src/main/java/li/cil/oc2/client/gui/TabletTerminalScreen.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/* SPDX-License-Identifier: MIT */

package li.cil.oc2.client.gui;

import li.cil.oc2.common.container.TabletTerminalContainer;
import net.minecraft.client.gui.components.EditBox;
import net.minecraft.network.chat.Component;
import net.minecraft.world.entity.player.Inventory;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public final class TabletTerminalScreen extends AbstractMachineTerminalScreen<TabletTerminalContainer> {
@SuppressWarnings("all") private EditBox focusIndicatorEditBox;

///////////////////////////////////////////////////////////////////

public TabletTerminalScreen(final TabletTerminalContainer container, final Inventory playerInventory, final Component title) {
super(container, playerInventory, title);
}

///////////////////////////////////////////////////////////////////

@Override
protected void setFocusIndicatorEditBox(final EditBox editBox) {
focusIndicatorEditBox = editBox;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ public void handleUpdateTag(final CompoundTag tag) {
super.handleUpdateTag(tag);

NBTSerialization.deserialize(tag.getCompound(TERMINAL_TAG_NAME), terminal);

// Only update client-side state on the client
if (level != null && level.isClientSide()) {
virtualMachine.setBusStateClient(CommonDeviceBusController.BusState.values()[tag.getInt(AbstractVirtualMachine.BUS_STATE_TAG_NAME)]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@ private Optional<TerminalUserProvider> getTerminalUserProvider(final ItemDeviceQ
}
}

if (query.getContainerTabletState().isPresent()) {
final LazyOptional<TerminalUserProvider> capability =
LazyOptional.of(() -> query.getContainerTabletState().get()).cast();

return capability.resolve();
}

return Optional.empty();
}
}
21 changes: 18 additions & 3 deletions src/main/java/li/cil/oc2/common/bus/device/util/Devices.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

package li.cil.oc2.common.bus.device.util;

import li.cil.oc2.common.vm.tablet.TabletState;
import li.cil.oc2.api.bus.device.Device;
import li.cil.oc2.api.bus.device.ItemDevice;
import li.cil.oc2.api.bus.device.provider.BlockDeviceProvider;
Expand Down Expand Up @@ -52,6 +53,10 @@ public static ItemDeviceQuery makeQuery(final Entity entity, final ItemStack sta
return new ItemQuery(entity, stack);
}

public static ItemDeviceQuery makeQuery(final TabletState item, final ItemStack stack) {
return new ItemQuery(item, stack);
}

public static Optional<List<Invalidatable<BlockDeviceInfo>>> getDevices(final BlockDeviceQuery query) {
final ChunkPos queryChunk = new ChunkPos(query.getQueryPosition());
if (!query.getLevel().hasChunk(queryChunk.x, queryChunk.z)) {
Expand Down Expand Up @@ -134,18 +139,23 @@ public Direction getQuerySide() {
private record ItemQuery(
@Nullable BlockEntity blockEntity,
@Nullable Entity entity,
@Nullable TabletState item,
ItemStack stack
) implements ItemDeviceQuery {
public ItemQuery(final ItemStack stack) {
this(null, null, stack);
this(null, null, null, stack);
}

public ItemQuery(final BlockEntity blockEntity, final ItemStack stack) {
this(blockEntity, null, stack);
this(blockEntity, null, null, stack);
}

public ItemQuery(final Entity entity, final ItemStack stack) {
this(null, entity, stack);
this(null, entity, null, stack);
}

public ItemQuery(final TabletState item, final ItemStack stack) {
this(null, null, item, stack);
}

@Override
Expand All @@ -158,6 +168,11 @@ public Optional<Entity> getContainerEntity() {
return Optional.ofNullable(entity);
}

@Override
public Optional<TabletState> getContainerTabletState() {
return Optional.ofNullable(item);
}

@Override
public ItemStack getItemStack() {
return stack;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import li.cil.oc2.api.capabilities.RedstoneEmitter;
import li.cil.oc2.api.capabilities.Robot;
import li.cil.oc2.api.capabilities.TerminalUserProvider;
import li.cil.oc2.common.vm.tablet.ITabletData;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.energy.IEnergyStorage;
import net.minecraftforge.fluids.capability.IFluidHandler;
Expand Down Expand Up @@ -52,6 +53,10 @@ public static Capability<Robot> robot() {
return CapabilityRegistry.ROBOT;
}

public static Capability<ITabletData> tabletData() {
return CapabilityRegistry.TABLET_DATA;
}

public static void registerCapabilities(final Consumer<Class<?>> registry) {
registry.accept(DeviceBusElement.class);
registry.accept(Device.class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import li.cil.oc2.api.capabilities.RedstoneEmitter;
import li.cil.oc2.api.capabilities.Robot;
import li.cil.oc2.api.capabilities.TerminalUserProvider;
import li.cil.oc2.common.vm.tablet.ITabletData;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.CapabilityManager;
import net.minecraftforge.common.capabilities.CapabilityToken;
Expand All @@ -32,6 +33,8 @@ public final class CapabilityRegistry {
static final Capability<TerminalUserProvider> TERMINAL_USER_PROVIDER = CapabilityManager.get(new CapabilityToken<>() { });
static final Capability<Robot> ROBOT = CapabilityManager.get(new CapabilityToken<>() { });

static final Capability<ITabletData> TABLET_DATA = CapabilityManager.get(new CapabilityToken<>() { });

///////////////////////////////////////////////////////////////////

@SubscribeEvent
Expand Down
14 changes: 11 additions & 3 deletions src/main/java/li/cil/oc2/common/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

@SuppressWarnings("FieldMayBeFinal")
public final class Config {
//TODO: Implement configuration of CPU MHzs
// TODO: Implement configuration of CPU MHzs
public static long maxAllocatedMemory = 512 * Constants.MEGABYTE;
public static int diskSizeFactor = 2 * Constants.MEGABYTE;

Expand All @@ -36,6 +36,9 @@ public final class Config {
public static int robotEnergyPerTick = 5;
public static int robotEnergyStorage = 750000;

public static int tabletEnergyPerTick = 1;
public static int tabletEnergyStorage = 750000;

public static double memoryEnergyPerMegabytePerTick = 0.5;
public static double hardDriveEnergyPerMegabytePerTick = 1;
public static double cpuEnergyPerMegahertzPerTick = 0.1;
Expand Down Expand Up @@ -65,8 +68,8 @@ public final class Config {
public static int defaultSessionsNumberPerCardLimit = 10;
public static int defaultSessionsNumberLimit = 100;
public static int defaultEchoRequestTimeoutMs = 1000;
public static List<String> deniedHosts =
Arrays.asList("127.0.0.0/8", "10.0.0.0/8", "100.64.0.0/10", "172.16.0.0/12", "192.168.0.0/16", "224.0.0.0/4");
public static List<String> deniedHosts = Arrays.asList("127.0.0.0/8", "10.0.0.0/8", "100.64.0.0/10",
"172.16.0.0/12", "192.168.0.0/16", "224.0.0.0/4");
public static List<String> allowedHosts = List.of();
public static String defaultNameServer = "1.1.1.1";
public static boolean useSynchronisedNAT = false;
Expand All @@ -92,9 +95,14 @@ public static boolean robotsUseEnergy() {
return robotEnergyPerTick > 0 && robotEnergyStorage > 0;
}

public static boolean tabletsUseEnergy() {
return tabletEnergyPerTick > 0 && tabletEnergyStorage > 0;
}

public static boolean monitorsUseEnergy() {
return computerEnergyPerTick > 0 && computerEnergyStorage > 0;
}

public static boolean gatewayUseEnergy() {
return gatewayEnergyPerPacket > 0 && gatewayEnergyStorage > 0;
}
Expand Down
Loading