From 26571b10a5ecbfd3c57b9a05ff20a934ffa83060 Mon Sep 17 00:00:00 2001 From: Jackson Abney Date: Sat, 25 May 2024 18:05:23 -0800 Subject: [PATCH] Finished initial implementation of tiered CPUs. They still need crafting recipes. Going to wait though because I plan to completely redo the recipes throughout the mod. --- .../cil/oc2/api/bus/device/DeviceTypes.java | 1 + .../gui/AbstractMachineInventoryScreen.java | 2 ++ .../li/cil/oc2/client/gui/util/GuiUtils.java | 3 ++- .../blockentity/DiskDriveRenderer.java | 5 +++-- .../java/li/cil/oc2/common/Constants.java | 1 + .../blockentity/ComputerBlockEntity.java | 14 +++++++++++++- .../oc2/common/bus/device/DeviceTypes.java | 1 + .../container/ComputerInventoryContainer.java | 6 ++++++ .../java/li/cil/oc2/common/item/CPUItem.java | 16 ++++++++++++++++ .../li/cil/oc2/common/item/ItemGroup.java | 4 ++++ .../java/li/cil/oc2/common/item/Items.java | 9 +++++++++ .../java/li/cil/oc2/common/tags/ItemTags.java | 1 + .../oc2/common/vm/AbstractVirtualMachine.java | 2 +- .../java/li/cil/oc2/common/vm/VMRunner.java | 4 ++-- .../li/cil/oc2/data/ModItemModelProvider.java | 4 ++++ .../li/cil/oc2/data/ModItemTagsProvider.java | 12 ++++++++++++ src/main/resources/assets/oc2/lang/en_us.json | 10 ++++++++++ src/main/resources/assets/oc2/lang/ru_ru.json | 2 ++ src/main/resources/assets/oc2/lang/zh_cn.json | 2 ++ .../assets/oc2/models/item/cpu_tier_1.json | 6 ++++++ .../assets/oc2/models/item/cpu_tier_2.json | 6 ++++++ .../assets/oc2/models/item/cpu_tier_3.json | 6 ++++++ .../assets/oc2/models/item/cpu_tier_4.json | 6 ++++++ .../gui/widget/computer_container.png | Bin 10112 -> 6884 bytes .../oc2/tags/items/device_needs_reboot.json | 6 +++++- .../data/oc2/tags/items/devices.json | 5 +++-- .../data/oc2/tags/items/devices/cpu.json | 9 +++++++++ 27 files changed, 133 insertions(+), 10 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/item/CPUItem.java create mode 100644 src/main/resources/assets/oc2/models/item/cpu_tier_1.json create mode 100644 src/main/resources/assets/oc2/models/item/cpu_tier_2.json create mode 100644 src/main/resources/assets/oc2/models/item/cpu_tier_3.json create mode 100644 src/main/resources/assets/oc2/models/item/cpu_tier_4.json create mode 100644 src/main/resources/data/oc2/tags/items/devices/cpu.json diff --git a/src/main/java/li/cil/oc2/api/bus/device/DeviceTypes.java b/src/main/java/li/cil/oc2/api/bus/device/DeviceTypes.java index 071af682..bef0a06e 100644 --- a/src/main/java/li/cil/oc2/api/bus/device/DeviceTypes.java +++ b/src/main/java/li/cil/oc2/api/bus/device/DeviceTypes.java @@ -20,4 +20,5 @@ public final class DeviceTypes { public static DeviceType FLOPPY = (DeviceType) RegistryObject.create(new ResourceLocation(API.MOD_ID, "floppy"), new ResourceLocation("oc2", "device_type"), API.MOD_ID).get(); public static DeviceType NETWORK_TUNNEL = (DeviceType) RegistryObject.create(new ResourceLocation(API.MOD_ID, "network_tunnel"), new ResourceLocation("oc2", "device_type"), API.MOD_ID).get(); + public static DeviceType CPU = (DeviceType) RegistryObject.create(new ResourceLocation(API.MOD_ID, "cpu"), new ResourceLocation("oc2", "device_type"), API.MOD_ID).get(); } diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java index 5ab8c79c..e8814e5c 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java @@ -128,6 +128,7 @@ public abstract class AbstractMachineInventoryScreen { if (slot == hoveredSlot) { - //TooltipUtils.drawTooltip(graphics, Collections.singletonList(tooltip), mouseX, mouseY); + TooltipUtils.drawTooltip(graphics, Collections.singletonList(tooltip), mouseX, mouseY); } }); } diff --git a/src/main/java/li/cil/oc2/client/renderer/blockentity/DiskDriveRenderer.java b/src/main/java/li/cil/oc2/client/renderer/blockentity/DiskDriveRenderer.java index ebf37528..a1cf4be2 100644 --- a/src/main/java/li/cil/oc2/client/renderer/blockentity/DiskDriveRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/blockentity/DiskDriveRenderer.java @@ -3,6 +3,7 @@ package li.cil.oc2.client.renderer.blockentity; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import net.minecraft.world.item.ItemDisplayContext; import org.joml.Quaternionf; import org.joml.Vector3f; @@ -40,9 +41,9 @@ public final class DiskDriveRenderer implements BlockEntityRenderer { + if(itemHandler.getSlots() > 0) { + addSlot(new DeviceTypeSlotItemHandler(itemHandler, DeviceTypes.CPU, 0, 64, 52)); + } + }); + createPlayerInventoryAndHotbarSlots(player.getInventory(), 8, 115); } } diff --git a/src/main/java/li/cil/oc2/common/item/CPUItem.java b/src/main/java/li/cil/oc2/common/item/CPUItem.java new file mode 100644 index 00000000..a125cbbd --- /dev/null +++ b/src/main/java/li/cil/oc2/common/item/CPUItem.java @@ -0,0 +1,16 @@ +package li.cil.oc2.common.item; + +public class CPUItem extends ModItem { + + private final int frequency; + + public CPUItem(int frequency) + { + this.frequency = frequency; + } + + public int getFrequency() + { + return frequency; + } +} diff --git a/src/main/java/li/cil/oc2/common/item/ItemGroup.java b/src/main/java/li/cil/oc2/common/item/ItemGroup.java index 4a1ffb7f..110e5ca9 100644 --- a/src/main/java/li/cil/oc2/common/item/ItemGroup.java +++ b/src/main/java/li/cil/oc2/common/item/ItemGroup.java @@ -93,6 +93,10 @@ public final class ItemGroup { output.accept(Items.HARD_DRIVE_LARGE.get()); output.accept(Items.HARD_DRIVE_EXTRA_LARGE.get()); output.accept(Items.HARD_DRIVE_CUSTOM.get()); + output.accept(Items.CPU_TIER_1.get()); + output.accept(Items.CPU_TIER_2.get()); + output.accept(Items.CPU_TIER_3.get()); + output.accept(Items.CPU_TIER_4.get()); output.accept(Items.FLASH_MEMORY.get()); output.accept(Items.FLASH_MEMORY_CUSTOM.get()); output.accept(Items.FLOPPY.get()); diff --git a/src/main/java/li/cil/oc2/common/item/Items.java b/src/main/java/li/cil/oc2/common/item/Items.java index 3eb2acde..7195b8d0 100644 --- a/src/main/java/li/cil/oc2/common/item/Items.java +++ b/src/main/java/li/cil/oc2/common/item/Items.java @@ -68,6 +68,15 @@ public final class Items { public static final RegistryObject HARD_DRIVE_CUSTOM = register("hard_drive_custom", () -> new HardDriveWithExternalDataItem(BlockDeviceDataRegistry.BUILDROOT.getId(), DyeColor.BROWN)); + public static final RegistryObject CPU_TIER_1 = register("cpu_tier_1", () -> + new CPUItem(25_000_000)); + public static final RegistryObject CPU_TIER_2 = register("cpu_tier_2", () -> + new CPUItem(50_000_000)); + public static final RegistryObject CPU_TIER_3 = register("cpu_tier_3", () -> + new CPUItem(100_000_000)); + public static final RegistryObject CPU_TIER_4 = register("cpu_tier_4", () -> + new CPUItem(200_000_000)); + public static final RegistryObject FLASH_MEMORY = register("flash_memory", () -> new FlashMemoryItem(12 * Constants.MEGABYTE)); public static final RegistryObject FLASH_MEMORY_CUSTOM = register("flash_memory_custom", () -> diff --git a/src/main/java/li/cil/oc2/common/tags/ItemTags.java b/src/main/java/li/cil/oc2/common/tags/ItemTags.java index 353a1412..bf56a8b7 100644 --- a/src/main/java/li/cil/oc2/common/tags/ItemTags.java +++ b/src/main/java/li/cil/oc2/common/tags/ItemTags.java @@ -18,6 +18,7 @@ public final class ItemTags { public static final TagKey DEVICES_ROBOT_MODULE = tag("devices/robot_module"); public static final TagKey DEVICES_FLOPPY = tag("devices/floppy"); public static final TagKey DEVICES_NETWORK_TUNNEL = tag("devices/network_tunnel"); + public static final TagKey DEVICES_CPU = tag("devices/cpu"); public static final TagKey CABLES = tag("cables"); public static final TagKey WRENCHES = tag("wrenches"); diff --git a/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java b/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java index e2b6b9c8..9a66d250 100644 --- a/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java +++ b/src/main/java/li/cil/oc2/common/vm/AbstractVirtualMachine.java @@ -244,7 +244,7 @@ public abstract class AbstractVirtualMachine implements VirtualMachine { protected void handleBootErrorChanged(@Nullable final Component value) { } - protected void error(@Nullable final Component message) { + public void error(@Nullable final Component message) { error(message, true); } diff --git a/src/main/java/li/cil/oc2/common/vm/VMRunner.java b/src/main/java/li/cil/oc2/common/vm/VMRunner.java index e81da735..866d24af 100644 --- a/src/main/java/li/cil/oc2/common/vm/VMRunner.java +++ b/src/main/java/li/cil/oc2/common/vm/VMRunner.java @@ -150,7 +150,7 @@ public class VMRunner implements Runnable { /////////////////////////////////////////////////////////////////// - private static int getCyclesPerTick() { - return Constants.CPU_FREQUENCY / TICKS_PER_SECOND; + private int getCyclesPerTick() { + return board.getCpu().getFrequency() / TICKS_PER_SECOND; } } diff --git a/src/main/java/li/cil/oc2/data/ModItemModelProvider.java b/src/main/java/li/cil/oc2/data/ModItemModelProvider.java index b91522ac..d1cf7e70 100644 --- a/src/main/java/li/cil/oc2/data/ModItemModelProvider.java +++ b/src/main/java/li/cil/oc2/data/ModItemModelProvider.java @@ -30,6 +30,10 @@ public final class ModItemModelProvider extends ItemModelProvider { simple(Items.MEMORY_MEDIUM); simple(Items.MEMORY_LARGE); simple(Items.MEMORY_EXTRA_LARGE); + simple(Items.CPU_TIER_1); + simple(Items.CPU_TIER_2); + simple(Items.CPU_TIER_3); + simple(Items.CPU_TIER_4); simple(Items.HARD_DRIVE_SMALL, "item/hard_drive_base") .texture("layer1", "item/hard_drive_tint"); simple(Items.HARD_DRIVE_MEDIUM, "item/hard_drive_base") diff --git a/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java b/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java index 42c514e8..733e3567 100644 --- a/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java +++ b/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java @@ -3,6 +3,7 @@ package li.cil.oc2.data; import li.cil.oc2.api.API; +import li.cil.oc2.common.item.CPUItem; import li.cil.oc2.common.item.Items; import li.cil.oc2.common.tags.BlockTags; import net.minecraft.data.DataGenerator; @@ -92,6 +93,10 @@ public final class ModItemTagsProvider extends ItemTagsProvider { Items.HARD_DRIVE_LARGE.get(), Items.HARD_DRIVE_EXTRA_LARGE.get(), Items.HARD_DRIVE_CUSTOM.get(), + Items.CPU_TIER_1.get(), + Items.CPU_TIER_2.get(), + Items.CPU_TIER_3.get(), + Items.CPU_TIER_4.get(), Items.KEYBOARD.get(), Items.MEMORY_SMALL.get(), Items.MEMORY_MEDIUM.get(), @@ -102,5 +107,12 @@ public final class ModItemTagsProvider extends ItemTagsProvider { Items.NETWORK_TUNNEL_MODULE.get(), Items.PROJECTOR.get() ); + + tag(DEVICES_CPU).add( + Items.CPU_TIER_1.get(), + Items.CPU_TIER_2.get(), + Items.CPU_TIER_3.get(), + Items.CPU_TIER_4.get() + ); } } diff --git a/src/main/resources/assets/oc2/lang/en_us.json b/src/main/resources/assets/oc2/lang/en_us.json index 63fc4860..58653aa9 100644 --- a/src/main/resources/assets/oc2/lang/en_us.json +++ b/src/main/resources/assets/oc2/lang/en_us.json @@ -31,6 +31,14 @@ "item.oc2.manual.desc": "Holds information on all things needed when working with Computers.", "item.oc2.bus_interface": "Bus Interface", "item.oc2.bus_interface.desc": "Connects external devices to Computers.", + "item.oc2.cpu_tier_1": "CPU Tier 1", + "item.oc2.cpu_tier_1.desc": "Processes computer instructions.", + "item.oc2.cpu_tier_2": "CPU Tier 2", + "item.oc2.cpu_tier_2.desc": "Processes computer instructions.", + "item.oc2.cpu_tier_3": "CPU Tier 3", + "item.oc2.cpu_tier_3.desc": "Processes computer instructions.", + "item.oc2.cpu_tier_4": "CPU Tier 4", + "item.oc2.cpu_tier_4.desc": "Processes computer instructions.", "item.oc2.network_cable": "Network Cable", "item.oc2.network_cable.desc": "Connects Network Connectors.", "item.oc2.memory": "Memory", @@ -77,6 +85,7 @@ "gui.oc2.computer.bus_state.too_complex": "Bus Too Complex", "gui.oc2.computer.bus_state.multiple_controllers": "Multiple Bus Controllers", "gui.oc2.computer.error.not_enough_energy": "Not Enough Energy", + "gui.oc2.computer.error.missing_cpu": "Missing CPU", "gui.oc2.computer.capture_input.capt": "Capture Input", "gui.oc2.computer.capture_input.desc": "When enabled, as long as the mouse cursor is hovering the terminal contents, all input will be captured, including the escape key.", @@ -122,6 +131,7 @@ "tooltip.oc2.flash_memory_missing": "A flash memory containing a firmware is required to boot.", "tooltip.oc2.memory_missing": "Some memory is required to load the flash memory for execution to boot.", "tooltip.oc2.hard_drive_missing": "Most systems will require a root file system to boot.", + "tooltip.oc2.cpu_missing": "A cpu is required to boot", "tooltip.oc2.energy": "Energy: %s", "tooltip.oc2.energyConsumption": "Energy Consumption: %s/t", "tooltip.oc2.confirm": "Confirm", diff --git a/src/main/resources/assets/oc2/lang/ru_ru.json b/src/main/resources/assets/oc2/lang/ru_ru.json index 8b854f45..3142dabc 100644 --- a/src/main/resources/assets/oc2/lang/ru_ru.json +++ b/src/main/resources/assets/oc2/lang/ru_ru.json @@ -29,6 +29,7 @@ "gui.oc2.computer.capture_input.capt": "Захват ввода", "gui.oc2.computer.capture_input.desc": "Пока курсор находится в пределах окна терминала, ввод (включая нажатие на ESC) будет захватываться.", "gui.oc2.computer.error.insufficient_memory": "Недостаточно памяти", + "gui.oc2.computer.error.missing_cpu": "Отсутствует процессор", "gui.oc2.computer.error.missing_firmware": "Отсутствует прошивка", "gui.oc2.computer.error.not_enough_energy": "Недостаточно энергии", "gui.oc2.computer.error.unknown": "Неизвестная ошибка", @@ -110,6 +111,7 @@ "subtitles.oc2.hdd": "Шум жесткого диска", "tooltip.oc2.cancel": "Отмена", "tooltip.oc2.confirm": "Подтвердить", + "tooltip.oc2.cpu_missing": "Для загрузки требуется процессор", "tooltip.oc2.device_needs_reboot": "Требуется перезагрузка", "tooltip.oc2.energy": "Энергия: %s", "tooltip.oc2.energyConsumption": "Потребление энергии: %s/t", diff --git a/src/main/resources/assets/oc2/lang/zh_cn.json b/src/main/resources/assets/oc2/lang/zh_cn.json index 51ca918b..5a027e27 100644 --- a/src/main/resources/assets/oc2/lang/zh_cn.json +++ b/src/main/resources/assets/oc2/lang/zh_cn.json @@ -29,6 +29,7 @@ "gui.oc2.computer.capture_input.capt": "捕获输入", "gui.oc2.computer.capture_input.desc": "当开启并且鼠标移动到终端内时,将捕获所有的输入,包括ESC键", "gui.oc2.computer.error.insufficient_memory": "内存不足", + "gui.oc2.computer.error.missing_cpu": "缺少CPU", "gui.oc2.computer.error.missing_firmware": "丢失固件", "gui.oc2.computer.error.not_enough_energy": "能量不足", "gui.oc2.computer.error.unknown": "未知错误", @@ -110,6 +111,7 @@ "subtitles.oc2.hdd": "硬盘:访问", "tooltip.oc2.cancel": "取消", "tooltip.oc2.confirm": "确认", + "tooltip.oc2.cpu_missing": "启动时需要CPU", "tooltip.oc2.device_needs_reboot": "需要重启", "tooltip.oc2.energy": "能量:%s", "tooltip.oc2.energyConsumption": "能量使用:%s/t", diff --git a/src/main/resources/assets/oc2/models/item/cpu_tier_1.json b/src/main/resources/assets/oc2/models/item/cpu_tier_1.json new file mode 100644 index 00000000..54a9a303 --- /dev/null +++ b/src/main/resources/assets/oc2/models/item/cpu_tier_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "oc2:item/cpu_tier_1" + } +} diff --git a/src/main/resources/assets/oc2/models/item/cpu_tier_2.json b/src/main/resources/assets/oc2/models/item/cpu_tier_2.json new file mode 100644 index 00000000..4c001339 --- /dev/null +++ b/src/main/resources/assets/oc2/models/item/cpu_tier_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "oc2:item/cpu_tier_2" + } +} diff --git a/src/main/resources/assets/oc2/models/item/cpu_tier_3.json b/src/main/resources/assets/oc2/models/item/cpu_tier_3.json new file mode 100644 index 00000000..9a311dc9 --- /dev/null +++ b/src/main/resources/assets/oc2/models/item/cpu_tier_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "oc2:item/cpu_tier_3" + } +} diff --git a/src/main/resources/assets/oc2/models/item/cpu_tier_4.json b/src/main/resources/assets/oc2/models/item/cpu_tier_4.json new file mode 100644 index 00000000..e38ee80e --- /dev/null +++ b/src/main/resources/assets/oc2/models/item/cpu_tier_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "oc2:item/cpu_tier_4" + } +} diff --git a/src/main/resources/assets/oc2/textures/gui/widget/computer_container.png b/src/main/resources/assets/oc2/textures/gui/widget/computer_container.png index 08cd17c4260d73241364d2b5f8c52a6270f1138e..5d063561ebe4aa6403e52cca8590f9d1aa06b338 100644 GIT binary patch delta 5857 zcma)A2{=^k+n+Hrwz0ehGuEtQDaMv<>|3%gk!9>gwqXXtpfscGq!>w}q`a2UAXyS) z6v^I1glrXRLa4NPKfUk&y}tMR{{QQ{zH?pYy3g~wxAVKt^PJ~ChvM{F`;sUb1ONc~ zGO`W<0KhZh78cGn78cUZvG`NrxDWt9Y3y=AkDa-T(11xqV3Eru3#;>K+9A83+r{iv zDmCodPa-B(@0x!2cwOL`*gbBDi(OB~H)sTJ>G=w!b79cZTyI;y)$j^1@BEO_YFy8k z>wQM6=d{aQnv>@N*tjHBk*yB$TRAA|yH)}^X1PkPZtb0YnC$S4l@-3+b-dvz)V^-% zGM6vV?)+9sWkk}F&C+^nSH$*x+6f!$6-G59rPR=QZ|Zrl@L3Ig_a!xID`8x%wUzsU ztG2|QKx9KmdR6S)%y8ZI&Y>2VwX7}zwxD_kS}qMd(_RuJ(X)%aEj($*RPHMWSyv`5kw{mkN)KHkB06Jz^La=cDc%0D!ID+1|~{)YR0#z(7k& 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 diff --git a/src/main/resources/data/oc2/tags/items/device_needs_reboot.json b/src/main/resources/data/oc2/tags/items/device_needs_reboot.json index d049cbb8..50ec87fa 100644 --- a/src/main/resources/data/oc2/tags/items/device_needs_reboot.json +++ b/src/main/resources/data/oc2/tags/items/device_needs_reboot.json @@ -17,6 +17,10 @@ "oc2:network_interface_card", "oc2:network_tunnel_card", "oc2:network_tunnel_module", - "oc2:projector" + "oc2:projector", + "oc2:cpu_tier_1", + "oc2:cpu_tier_2", + "oc2:cpu_tier_3", + "oc2:cpu_tier_4" ] } diff --git a/src/main/resources/data/oc2/tags/items/devices.json b/src/main/resources/data/oc2/tags/items/devices.json index 54632988..bc44270c 100644 --- a/src/main/resources/data/oc2/tags/items/devices.json +++ b/src/main/resources/data/oc2/tags/items/devices.json @@ -10,6 +10,7 @@ "#oc2:devices/flash_memory", "#oc2:devices/card", "#oc2:devices/robot_module", - "#oc2:devices/floppy" + "#oc2:devices/floppy", + "#oc2:devices/cpu" ] -} \ No newline at end of file +} diff --git a/src/main/resources/data/oc2/tags/items/devices/cpu.json b/src/main/resources/data/oc2/tags/items/devices/cpu.json new file mode 100644 index 00000000..0abfb014 --- /dev/null +++ b/src/main/resources/data/oc2/tags/items/devices/cpu.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "oc2:cpu_tier_1", + "oc2:cpu_tier_2", + "oc2:cpu_tier_3", + "oc2:cpu_tier_4" + ] +}