From c8afe48a9b2aa2342ac389b7d048b0e45fe09e9d Mon Sep 17 00:00:00 2001 From: Jackson Abney Date: Fri, 24 May 2024 23:11:07 -0800 Subject: [PATCH] Start of 1.20.1 port --- build.gradle | 8 +- gradle.properties | 2 +- minecraft.gradle | 2 +- .../java/li/cil/oc2/client/ClientSetup.java | 36 +++--- .../gui/AbstractMachineInventoryScreen.java | 63 +++++----- .../gui/AbstractMachineTerminalScreen.java | 43 ++++--- .../gui/AbstractModContainerScreen.java | 23 ++-- .../oc2/client/gui/BusInterfaceScreen.java | 24 ++-- .../client/gui/ComputerContainerScreen.java | 7 +- .../cil/oc2/client/gui/FileChooserScreen.java | 30 +++-- .../li/cil/oc2/client/gui/KeyboardScreen.java | 38 +++--- .../oc2/client/gui/MachineTerminalWidget.java | 52 ++++++--- .../gui/NetworkInterfaceCardScreen.java | 34 +++--- .../oc2/client/gui/NetworkTunnelScreen.java | 18 ++- .../oc2/client/gui/RobotContainerScreen.java | 13 ++- .../oc2/client/gui/RobotTerminalScreen.java | 9 +- .../li/cil/oc2/client/gui/util/GuiUtils.java | 19 +-- .../oc2/client/gui/widget/ImageButton.java | 37 +----- .../li/cil/oc2/client/gui/widget/Sprite.java | 20 ++-- .../li/cil/oc2/client/gui/widget/Texture.java | 4 - .../client/gui/widget/ToggleImageButton.java | 7 +- .../cil/oc2/client/manual/ModManualStyle.java | 2 +- .../cil/oc2/client/model/BusCableModel.java | 32 ++--- .../renderer/BusInterfaceNameRenderer.java | 8 +- .../cil/oc2/client/renderer/ModShaders.java | 4 +- .../client/renderer/NetworkCableRenderer.java | 12 +- .../renderer/ProjectorDepthRenderer.java | 42 +++---- .../renderer/blockentity/ChargerRenderer.java | 2 +- .../blockentity/ComputerRenderer.java | 24 +++- .../blockentity/DiskDriveRenderer.java | 10 +- .../blockentity/ProjectorRenderer.java | 14 +-- .../client/renderer/entity/RobotRenderer.java | 10 +- .../entity/RobotWithoutLevelRenderer.java | 3 +- src/main/java/li/cil/oc2/common/Main.java | 3 + .../java/li/cil/oc2/common/block/Blocks.java | 2 +- .../cil/oc2/common/block/BusCableBlock.java | 8 +- .../li/cil/oc2/common/block/ChargerBlock.java | 5 +- .../cil/oc2/common/block/ComputerBlock.java | 16 +-- .../oc2/common/block/CreativeEnergyBlock.java | 5 +- .../cil/oc2/common/block/DiskDriveBlock.java | 5 +- .../common/block/FlashMemoryFlasherBlock.java | 5 +- .../cil/oc2/common/block/KeyboardBlock.java | 4 +- .../common/block/NetworkConnectorBlock.java | 5 +- .../cil/oc2/common/block/NetworkHubBlock.java | 5 +- .../oc2/common/block/NetworkSwitchBlock.java | 5 +- .../oc2/common/block/PciCardCageBlock.java | 5 +- .../cil/oc2/common/block/ProjectorBlock.java | 5 +- .../common/block/RedstoneInterfaceBlock.java | 10 +- .../li/cil/oc2/common/block/VxlanBlock.java | 5 +- .../blockentity/BusCableBlockEntity.java | 4 +- .../blockentity/DiskDriveBlockEntity.java | 3 +- .../FlashMemoryFlasherBlockEntity.java | 2 +- .../rpc/item/BlockOperationsModuleDevice.java | 12 +- .../item/InventoryOperationsModuleDevice.java | 10 +- .../common/container/AbstractContainer.java | 2 +- .../container/ComputerInventoryContainer.java | 2 +- .../container/ComputerTerminalContainer.java | 2 +- .../container/NetworkTunnelContainer.java | 2 +- .../container/RobotInventoryContainer.java | 2 +- .../container/RobotTerminalContainer.java | 2 +- .../java/li/cil/oc2/common/entity/Robot.java | 37 +++--- .../entity/robot/RobotMovementAction.java | 4 +- .../cil/oc2/common/item/BusInterfaceItem.java | 7 -- .../li/cil/oc2/common/item/ChargerItem.java | 7 -- .../item/HardDriveWithExternalDataItem.java | 14 --- .../li/cil/oc2/common/item/ItemGroup.java | 110 +++++++++++++++++- .../li/cil/oc2/common/item/ManualItem.java | 2 +- .../li/cil/oc2/common/item/ModBlockItem.java | 2 +- .../java/li/cil/oc2/common/item/ModItem.java | 2 +- .../common/item/NetworkInterfaceCardItem.java | 4 +- .../li/cil/oc2/common/item/RobotItem.java | 9 +- .../common/item/crafting/WrenchRecipe.java | 4 +- .../li/cil/oc2/common/mixin/AtlasAdder.java | 27 +++++ .../oc2/common/mixin/LevelRendererMixin.java | 2 +- .../cil/oc2/common/network/MessageUtils.java | 6 +- .../li/cil/oc2/common/tags/BlockTags.java | 3 +- .../java/li/cil/oc2/common/tags/ItemTags.java | 3 +- .../li/cil/oc2/common/util/BlockLocation.java | 2 +- .../common/util/ChainableVertexConsumer.java | 6 +- .../li/cil/oc2/common/util/SoundEvents.java | 2 +- .../li/cil/oc2/common/util/TooltipUtils.java | 21 ++-- .../li/cil/oc2/common/util/Vec3Utils.java | 10 ++ .../java/li/cil/oc2/common/vm/Terminal.java | 8 +- .../java/li/cil/oc2/data/DataGenerators.java | 38 ++++-- .../cil/oc2/data/ModBlockStateProvider.java | 34 +++--- .../li/cil/oc2/data/ModBlockTagsProvider.java | 12 +- .../li/cil/oc2/data/ModItemModelProvider.java | 5 +- .../li/cil/oc2/data/ModItemTagsProvider.java | 17 ++- .../li/cil/oc2/data/ModLootTableProvider.java | 46 ++++---- .../li/cil/oc2/data/ModRecipesProvider.java | 74 ++++++------ .../li/cil/oc2/data/WrenchRecipeBuilder.java | 8 +- .../resources/META-INF/accesstransformer.cfg | 3 + src/main/resources/assets/oc2/lang/en_us.json | 2 +- src/main/resources/assets/oc2/lang/ru_ru.json | 2 +- src/main/resources/assets/oc2/lang/zh_cn.json | 2 +- src/main/resources/mixins.oc2.json | 3 +- src/main/resources/pack.mcmeta | 2 +- 97 files changed, 780 insertions(+), 548 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/mixin/AtlasAdder.java create mode 100644 src/main/java/li/cil/oc2/common/util/Vec3Utils.java diff --git a/build.gradle b/build.gradle index b9d1f22e..a018657f 100644 --- a/build.gradle +++ b/build.gradle @@ -92,13 +92,13 @@ dependencies { implementation "curse.maven:sedna-511276:3885542" minecraftLibrary "org.apache.commons:commons-collections4:4.4" - implementation fg.deobf("curse.maven:markdownmanual-502485:4306669") + implementation fg.deobf("curse.maven:markdownmanual-502485:4873115") implementation fg.deobf("curse.maven:architectury-api-419699:4521273") - compileOnly fg.deobf("mezz.jei:jei-1.19.2-common-api:11.6.0.1015") - compileOnly fg.deobf("mezz.jei:jei-1.19.2-forge-api:11.6.0.1015") + compileOnly fg.deobf("mezz.jei:jei-1.20.1-common-api:15.3.0.4") + compileOnly fg.deobf("mezz.jei:jei-1.20.1-forge-api:15.3.0.4") - runtimeOnly fg.deobf("mezz.jei:jei-1.19.2-forge:11.6.0.1015") + runtimeOnly fg.deobf("mezz.jei:jei-1.20.1-forge:15.3.0.4") testImplementation "org.mockito:mockito-inline:4.3.1" testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.2" diff --git a/gradle.properties b/gradle.properties index 89ea9c0b..f568ae6b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -forge_version=43.2.10 +forge_version=47.2.32 semver=0.0.0 diff --git a/minecraft.gradle b/minecraft.gradle index a4a49e1e..073b4683 100644 --- a/minecraft.gradle +++ b/minecraft.gradle @@ -1,4 +1,4 @@ ext { - minecraft_version = '1.19.2' + minecraft_version = '1.20.1' minecraft_sdk = 'forge' } diff --git a/src/main/java/li/cil/oc2/client/ClientSetup.java b/src/main/java/li/cil/oc2/client/ClientSetup.java index 10cfc035..b6a3c7d0 100644 --- a/src/main/java/li/cil/oc2/client/ClientSetup.java +++ b/src/main/java/li/cil/oc2/client/ClientSetup.java @@ -22,6 +22,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.ItemBlockRenderTypes; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.InventoryMenu; import net.minecraftforge.client.event.EntityRenderersEvent; import net.minecraftforge.client.event.ModelEvent.RegisterGeometryLoaders; @@ -31,10 +32,17 @@ import net.minecraftforge.client.gui.overlay.VanillaGuiOverlay; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import org.jetbrains.annotations.ApiStatus; +import java.util.HashMap; +import java.util.HashSet; import java.util.Objects; +import java.util.Set; +import java.util.function.Consumer; public final class ClientSetup { + private static final Set sprites = new HashSet(); + @SubscribeEvent public static void handleSetupEvent(final FMLClientSetupEvent event) { BusInterfaceNameRenderer.initialize(); @@ -59,6 +67,16 @@ public final class ClientSetup { // We need to register this manually, because static init throws errors when running data generation. MinecraftForge.EVENT_BUS.register(ProjectorDepthRenderer.class); + + for (final DeviceType deviceType : DeviceTypes.DEVICE_TYPE_REGISTRY.get().getValues()) { + sprites.add(deviceType.getBackgroundIcon()); + } + + sprites.add(ComputerRenderer.OVERLAY_POWER_LOCATION); + sprites.add(ComputerRenderer.OVERLAY_STATUS_LOCATION); + sprites.add(ComputerRenderer.OVERLAY_TERMINAL_LOCATION); + + sprites.add(ChargerRenderer.EFFECT_LOCATION); }); } @@ -76,21 +94,11 @@ public final class ClientSetup { } } - @SubscribeEvent - public static void handleTextureStitchEvent(final TextureStitchEvent.Pre event) { - if (!Objects.equals(event.getAtlas().location(), InventoryMenu.BLOCK_ATLAS)) { - return; - } + @ApiStatus.Internal + public static void collectSprites(ResourceLocation atlas, Consumer spriteConsumer) { + if(!Objects.equals(atlas, InventoryMenu.BLOCK_ATLAS)) return; - for (final DeviceType deviceType : DeviceTypes.DEVICE_TYPE_REGISTRY.get().getValues()) { - event.addSprite(deviceType.getBackgroundIcon()); - } - - event.addSprite(ComputerRenderer.OVERLAY_POWER_LOCATION); - event.addSprite(ComputerRenderer.OVERLAY_STATUS_LOCATION); - event.addSprite(ComputerRenderer.OVERLAY_TERMINAL_LOCATION); - - event.addSprite(ChargerRenderer.EFFECT_LOCATION); + sprites.forEach(spriteConsumer); } @SubscribeEvent 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 0b86ac29..5ab8c79c 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineInventoryScreen.java @@ -3,7 +3,6 @@ package li.cil.oc2.client.gui; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.PoseStack; import li.cil.oc2.api.bus.device.DeviceTypes; import li.cil.oc2.client.gui.util.GuiUtils; import li.cil.oc2.client.gui.widget.ImageButton; @@ -12,6 +11,8 @@ import li.cil.oc2.common.Constants; import li.cil.oc2.common.container.AbstractMachineTerminalContainer; import li.cil.oc2.common.util.TooltipUtils; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; @@ -69,6 +70,10 @@ public abstract class AbstractMachineInventoryScreen tooltip = asList( - Component.translatable(Constants.TOOLTIP_ENERGY, - withFormat(menu.getEnergy() + "/" + menu.getEnergyCapacity(), ChatFormatting.GREEN)), - Component.translatable(Constants.TOOLTIP_ENERGY_CONSUMPTION, - withFormat(String.valueOf(menu.getEnergyConsumption()), ChatFormatting.GREEN)) - ); - TooltipUtils.drawTooltip(stack, tooltip, mouseX, mouseY, 200); - } + if (!shouldRenderEnergyBar()) { + return; + } + + if (isMouseOver(mouseX, mouseY, -Sprites.SIDEBAR_2.width + 4, ENERGY_TOP + 4, Sprites.ENERGY_BAR.width, Sprites.ENERGY_BAR.height)) { + final List tooltip = asList( + Component.translatable(Constants.TOOLTIP_ENERGY, + withFormat(menu.getEnergy() + "/" + menu.getEnergyCapacity(), ChatFormatting.GREEN)), + Component.translatable(Constants.TOOLTIP_ENERGY_CONSUMPTION, + withFormat(String.valueOf(menu.getEnergyConsumption()), ChatFormatting.GREEN)) + ); + TooltipUtils.drawTooltip(graphics, tooltip, mouseX, mouseY, 200); } } diff --git a/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java index e540ee01..a42f2bb2 100644 --- a/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/AbstractMachineTerminalScreen.java @@ -10,7 +10,10 @@ import li.cil.oc2.common.Constants; import li.cil.oc2.common.container.AbstractMachineTerminalContainer; import li.cil.oc2.common.util.TooltipUtils; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; @@ -100,7 +103,7 @@ public abstract class AbstractMachineTerminalScreen new Vector3f(0, 90, 0); default -> throw new IllegalStateException("Unexpected value: " + side); }; - poseStack.mulPose(Quaternion.fromXYZDegrees(sideRotation)); + poseStack.mulPose(new Quaternionf().rotateXYZ(sideRotation.x, sideRotation.y, sideRotation.z)); poseStack.translate(-0.5, -0.5, 0); diff --git a/src/main/java/li/cil/oc2/client/gui/NetworkTunnelScreen.java b/src/main/java/li/cil/oc2/client/gui/NetworkTunnelScreen.java index 9cc9c527..72533bac 100644 --- a/src/main/java/li/cil/oc2/client/gui/NetworkTunnelScreen.java +++ b/src/main/java/li/cil/oc2/client/gui/NetworkTunnelScreen.java @@ -8,6 +8,8 @@ import li.cil.oc2.client.gui.widget.ImageButton; import li.cil.oc2.common.container.NetworkTunnelContainer; import li.cil.oc2.common.network.Network; import li.cil.oc2.common.network.message.NetworkTunnelLinkMessage; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.player.Inventory; @@ -35,13 +37,13 @@ public final class NetworkTunnelScreen extends AbstractModContainerScreen void renderMissingDeviceInfoIcon(final PoseStack stack, final AbstractContainerScreen screen, final DeviceType type, final Sprite icon) { - stack.pushPose(); - stack.translate(0, 0, 100); - findFirstSlotOfTypeIfAllSlotsOfTypeEmpty(screen.getMenu(), type).ifPresent(slot -> icon.draw(stack, + public static void renderMissingDeviceInfoIcon(final GuiGraphics graphics, final AbstractContainerScreen screen, final DeviceType type, final Sprite icon) { + graphics.pose().pushPose(); + graphics.pose().translate(0, 0, 100); + findFirstSlotOfTypeIfAllSlotsOfTypeEmpty(screen.getMenu(), type).ifPresent(slot -> icon.draw(graphics, screen.getGuiLeft() + slot.x - 1 + RELATIVE_ICON_POSITION, screen.getGuiTop() + slot.y - 1 + RELATIVE_ICON_POSITION)); - stack.popPose(); + graphics.pose().popPose(); } - public static void renderMissingDeviceInfoTooltip(final PoseStack stack, final AbstractContainerScreen screen, final int mouseX, final int mouseY, final DeviceType type) { - renderMissingDeviceInfoTooltip(stack, screen, mouseX, mouseY, type, Objects.requireNonNull(WARNING_BY_DEVICE_TYPE.get(type))); + public static void renderMissingDeviceInfoTooltip(final GuiGraphics graphics, final AbstractContainerScreen screen, final int mouseX, final int mouseY, final DeviceType type) { + renderMissingDeviceInfoTooltip(graphics, screen, mouseX, mouseY, type, Objects.requireNonNull(WARNING_BY_DEVICE_TYPE.get(type))); } - public static void renderMissingDeviceInfoTooltip(final PoseStack stack, final AbstractContainerScreen screen, final int mouseX, final int mouseY, final DeviceType type, final Component tooltip) { + public static void renderMissingDeviceInfoTooltip(final GuiGraphics graphics, final AbstractContainerScreen screen, final int mouseX, final int mouseY, final DeviceType type, final Component tooltip) { final Minecraft minecraft = screen.getMinecraft(); if (minecraft.player == null) { return; @@ -67,7 +68,7 @@ public final class GuiUtils { findFirstSlotOfTypeIfAllSlotsOfTypeEmpty(screen.getMenu(), type).ifPresent(slot -> { if (slot == hoveredSlot) { - TooltipUtils.drawTooltip(stack, Collections.singletonList(tooltip), mouseX, mouseY); + //TooltipUtils.drawTooltip(graphics, Collections.singletonList(tooltip), mouseX, mouseY); } }); } diff --git a/src/main/java/li/cil/oc2/client/gui/widget/ImageButton.java b/src/main/java/li/cil/oc2/client/gui/widget/ImageButton.java index 124f2f88..1b2da602 100644 --- a/src/main/java/li/cil/oc2/client/gui/widget/ImageButton.java +++ b/src/main/java/li/cil/oc2/client/gui/widget/ImageButton.java @@ -7,6 +7,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import li.cil.oc2.common.util.TooltipUtils; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.AbstractButton; import net.minecraft.client.gui.narration.NarrationElementOutput; import net.minecraft.network.chat.Component; @@ -61,39 +62,13 @@ public abstract class ImageButton extends AbstractButton { } @Override - public void renderButton(final PoseStack stack, final int mouseX, final int mouseY, final float partialTicks) { - renderBackground(stack, mouseX, mouseY, partialTicks); - - renderToolTip(stack, mouseX, mouseY); - } - - @Override - public void renderToolTip(final PoseStack stack, final int mouseX, final int mouseY) { - if (tooltip.isEmpty()) { - return; - } - - if (isHoveredOrFocused()) { - if (hoveringStartedAt == 0) { - hoveringStartedAt = System.currentTimeMillis(); - } - - if ((System.currentTimeMillis() - hoveringStartedAt) > TOOLTIP_DELAY) { - TooltipUtils.drawTooltip(stack, tooltip, mouseX, mouseY, 200); - } - } else { - hoveringStartedAt = 0; - } - } - - @Override - public void updateNarration(final NarrationElementOutput element) { - this.defaultButtonNarrationText(element); + public void renderWidget(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { + renderBackground(graphics, mouseX, mouseY, partialTicks); } /////////////////////////////////////////////////////////////////// - protected void renderBackground(final PoseStack stack, final int mouseX, final int mouseY, final float partialTicks) { + protected void renderBackground(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { RenderSystem.enableDepthTest(); Sprite background = baseImage; @@ -101,10 +76,10 @@ public abstract class ImageButton extends AbstractButton { background = pressedImage; } - background.draw(stack, x, y); + background.draw(graphics, x, y); if (!Objects.equals(getMessage(), Component.empty())) { - drawCenteredString(stack, Minecraft.getInstance().font, getMessage(), + graphics.drawCenteredString(Minecraft.getInstance().font, getMessage(), x + width / 2, y + (height - 8) / 2, getFGColor() | Mth.ceil(alpha * 255) << 24); } diff --git a/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java b/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java index ecfce7dd..f2807e41 100644 --- a/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java +++ b/src/main/java/li/cil/oc2/client/gui/widget/Sprite.java @@ -2,8 +2,7 @@ package li.cil.oc2.client.gui.widget; -import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.GuiComponent; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.util.Mth; public final class Sprite { @@ -31,21 +30,16 @@ public final class Sprite { /////////////////////////////////////////////////////////////////// - public void draw(final PoseStack stack, final int x, final int y) { - draw(stack, x, y, 0, 0); + public void draw(final GuiGraphics graphics, final int x, final int y) { + draw(graphics, x, y, 0, 0); } - public void draw(final PoseStack stack, final int x, final int y, final int uOffset, final int vOffset) { - blit(stack, x, y, u0 + uOffset, v0 + vOffset, width, height); + public void draw(final GuiGraphics graphics, final int x, final int y, final int uOffset, final int vOffset) { + graphics.blit(texture.location, x, y, u0 + uOffset, v0 + vOffset, width, height); } - public void drawFillY(final PoseStack stack, final int x, final int y, final float value) { + public void drawFillY(final GuiGraphics graphics, final int x, final int y, final float value) { final int h = (int) (this.height * Mth.clamp(value, 0, 1)); - blit(stack, x, y + (height - h), u0, v0 + (height - h), width, h); - } - - private void blit(final PoseStack stack, final int x, final int y, final int u0, final int v0, final int width, final int height) { - texture.bind(); - GuiComponent.blit(stack, x, y, u0, v0, width, height, texture.width, texture.height); + graphics.blit(texture.location, x, y + (height - h), u0, v0 + (height - h), width, h); } } diff --git a/src/main/java/li/cil/oc2/client/gui/widget/Texture.java b/src/main/java/li/cil/oc2/client/gui/widget/Texture.java index 3df7b52a..7f8700ca 100644 --- a/src/main/java/li/cil/oc2/client/gui/widget/Texture.java +++ b/src/main/java/li/cil/oc2/client/gui/widget/Texture.java @@ -19,8 +19,4 @@ public final class Texture { this.width = width; this.height = height; } - - public void bind() { - RenderSystem.setShaderTexture(0, location); - } } diff --git a/src/main/java/li/cil/oc2/client/gui/widget/ToggleImageButton.java b/src/main/java/li/cil/oc2/client/gui/widget/ToggleImageButton.java index 4608c615..68df8dc3 100644 --- a/src/main/java/li/cil/oc2/client/gui/widget/ToggleImageButton.java +++ b/src/main/java/li/cil/oc2/client/gui/widget/ToggleImageButton.java @@ -3,6 +3,7 @@ package li.cil.oc2.client.gui.widget; import com.mojang.blaze3d.vertex.PoseStack; +import net.minecraft.client.gui.GuiGraphics; public abstract class ToggleImageButton extends ImageButton { private final Sprite activeImage; @@ -31,10 +32,10 @@ public abstract class ToggleImageButton extends ImageButton { } @Override - protected void renderBackground(final PoseStack stack, final int mouseX, final int mouseY, final float partialTicks) { - super.renderBackground(stack, mouseX, mouseY, partialTicks); + protected void renderBackground(final GuiGraphics graphics, final int mouseX, final int mouseY, final float partialTicks) { + super.renderBackground(graphics, mouseX, mouseY, partialTicks); if (isToggled()) { - activeImage.draw(stack, x, y); + activeImage.draw(graphics, x, y); } } } diff --git a/src/main/java/li/cil/oc2/client/manual/ModManualStyle.java b/src/main/java/li/cil/oc2/client/manual/ModManualStyle.java index 127d8013..bee9ee3a 100644 --- a/src/main/java/li/cil/oc2/client/manual/ModManualStyle.java +++ b/src/main/java/li/cil/oc2/client/manual/ModManualStyle.java @@ -51,6 +51,6 @@ public final class ModManualStyle implements ManualStyle { @Override public SoundEvent getPageChangeSound() { - return SoundEvents.UI_BUTTON_CLICK; + return SoundEvents.UI_BUTTON_CLICK.value(); } } diff --git a/src/main/java/li/cil/oc2/client/model/BusCableModel.java b/src/main/java/li/cil/oc2/client/model/BusCableModel.java index afac5026..2126a042 100644 --- a/src/main/java/li/cil/oc2/client/model/BusCableModel.java +++ b/src/main/java/li/cil/oc2/client/model/BusCableModel.java @@ -30,30 +30,22 @@ public final class BusCableModel implements IUnbakedGeometry { /////////////////////////////////////////////////////////////////// @Override - public BakedModel bake(final IGeometryBakingContext owner, final ModelBakery bakery, final Function spriteGetter, final ModelState modelTransform, final ItemOverrides overrides, final ResourceLocation modelLocation) { - final BakedModel bakedBaseModel = proxy.bake(owner, bakery, spriteGetter, modelTransform, overrides, modelLocation); + public BakedModel bake(final IGeometryBakingContext owner, final ModelBaker baker, final Function spriteGetter, final ModelState modelTransform, final ItemOverrides overrides, final ResourceLocation modelLocation) { + final BakedModel bakedBaseModel = proxy.bake(owner, baker, spriteGetter, modelTransform, overrides, modelLocation); final BakedModel[] straightModelByAxis = { - requireNonNull(bakery.bake(BUS_CABLE_STRAIGHT_MODEL, BlockModelRotation.X0_Y90, spriteGetter)), - requireNonNull(bakery.bake(BUS_CABLE_STRAIGHT_MODEL, BlockModelRotation.X90_Y0, spriteGetter)), - requireNonNull(bakery.bake(BUS_CABLE_STRAIGHT_MODEL, modelTransform, spriteGetter)) + requireNonNull(baker.bake(BUS_CABLE_STRAIGHT_MODEL, BlockModelRotation.X0_Y90, spriteGetter)), + requireNonNull(baker.bake(BUS_CABLE_STRAIGHT_MODEL, BlockModelRotation.X90_Y0, spriteGetter)), + requireNonNull(baker.bake(BUS_CABLE_STRAIGHT_MODEL, modelTransform, spriteGetter)) }; final BakedModel[] supportModelByFace = { - requireNonNull(bakery.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X270_Y0, spriteGetter)), // -y - requireNonNull(bakery.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X90_Y0, spriteGetter)), // +y - requireNonNull(bakery.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X0_Y180, spriteGetter)), // -z - requireNonNull(bakery.bake(BUS_CABLE_SUPPORT_MODEL, modelTransform, spriteGetter)), // +z - requireNonNull(bakery.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X0_Y90, spriteGetter)), // -x - requireNonNull(bakery.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X0_Y270, spriteGetter)) // +x + requireNonNull(baker.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X270_Y0, spriteGetter)), // -y + requireNonNull(baker.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X90_Y0, spriteGetter)), // +y + requireNonNull(baker.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X0_Y180, spriteGetter)), // -z + requireNonNull(baker.bake(BUS_CABLE_SUPPORT_MODEL, modelTransform, spriteGetter)), // +z + requireNonNull(baker.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X0_Y90, spriteGetter)), // -x + requireNonNull(baker.bake(BUS_CABLE_SUPPORT_MODEL, BlockModelRotation.X0_Y270, spriteGetter)) // +x }; - return new BusCableBakedModel(proxy.bake(owner, bakery, spriteGetter, modelTransform, overrides, modelLocation), straightModelByAxis, supportModelByFace); - } - - @Override - public Collection getMaterials(final IGeometryBakingContext owner, final Function modelGetter, final Set> missingTextureErrors) { - final ArrayList textures = new ArrayList<>(proxy.getMaterials(owner, modelGetter, missingTextureErrors)); - textures.addAll(modelGetter.apply(BUS_CABLE_STRAIGHT_MODEL).getMaterials(modelGetter, missingTextureErrors)); - textures.addAll(modelGetter.apply(BUS_CABLE_SUPPORT_MODEL).getMaterials(modelGetter, missingTextureErrors)); - return textures; + return new BusCableBakedModel(proxy.bake(owner, baker, spriteGetter, modelTransform, overrides, modelLocation), straightModelByAxis, supportModelByFace); } } diff --git a/src/main/java/li/cil/oc2/client/renderer/BusInterfaceNameRenderer.java b/src/main/java/li/cil/oc2/client/renderer/BusInterfaceNameRenderer.java index 5e01d5de..718613f9 100644 --- a/src/main/java/li/cil/oc2/client/renderer/BusInterfaceNameRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/BusInterfaceNameRenderer.java @@ -4,7 +4,7 @@ package li.cil.oc2.client.renderer; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; import li.cil.oc2.common.block.BusCableBlock; import li.cil.oc2.common.blockentity.BusCableBlockEntity; import li.cil.oc2.common.integration.Wrenches; @@ -45,7 +45,7 @@ public enum BusInterfaceNameRenderer { return; } - final Level level = player.level; + final Level level = player.level(); if (!Wrenches.isHoldingWrench(player)) { return; @@ -99,9 +99,9 @@ public enum BusInterfaceNameRenderer { final int packedLight = LightTexture.pack(15, 15); font.drawInBatch(name, horizontalTextOffset, 0, 0xffffffff, - false, matrix, buffer, true, backgroundColor, packedLight); + false, matrix, buffer, Font.DisplayMode.POLYGON_OFFSET, backgroundColor, packedLight); font.drawInBatch(name, horizontalTextOffset, 0, 0xffffffff, - false, matrix, buffer, false, 0, packedLight); + false, matrix, buffer, Font.DisplayMode.NORMAL, 0, packedLight); buffer.endBatch(); diff --git a/src/main/java/li/cil/oc2/client/renderer/ModShaders.java b/src/main/java/li/cil/oc2/client/renderer/ModShaders.java index 82a6a3c1..bca42421 100644 --- a/src/main/java/li/cil/oc2/client/renderer/ModShaders.java +++ b/src/main/java/li/cil/oc2/client/renderer/ModShaders.java @@ -4,7 +4,7 @@ package li.cil.oc2.client.renderer; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; import li.cil.oc2.api.API; import net.minecraft.client.renderer.ShaderInstance; import net.minecraft.client.renderer.texture.DynamicTexture; @@ -67,7 +67,7 @@ public final class ModShaders { @SubscribeEvent public static void handleRegisterShaders(final RegisterShadersEvent event) throws IOException { event.registerShader(new ShaderInstance( - event.getResourceManager(), + event.getResourceProvider(), PROJECTORS_SHADER_LOCATION, DefaultVertexFormat.POSITION_TEX ), instance -> projectorsShader = instance); diff --git a/src/main/java/li/cil/oc2/client/renderer/NetworkCableRenderer.java b/src/main/java/li/cil/oc2/client/renderer/NetworkCableRenderer.java index 810d920d..815ac388 100644 --- a/src/main/java/li/cil/oc2/client/renderer/NetworkCableRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/NetworkCableRenderer.java @@ -4,8 +4,10 @@ package li.cil.oc2.client.renderer; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import li.cil.oc2.common.util.Vec3Utils; +import net.minecraft.core.Vec3i; +import org.joml.Matrix4f; +import org.joml.Vector3f; import li.cil.oc2.api.API; import li.cil.oc2.common.blockentity.NetworkConnectorBlockEntity; import net.minecraft.client.Minecraft; @@ -183,13 +185,13 @@ public final class NetworkCableRenderer { final Vec3 p = quadraticBezier(p0, p1, p2, t); final Vec3 n = getExtrusionVector(eye, p, connection.forward); - final BlockPos blockPos = new BlockPos(p); + final BlockPos blockPos = new BlockPos(Vec3Utils.round(p)); final int blockLight = level.getBrightness(LightLayer.BLOCK, blockPos); final int skyLight = level.getBrightness(LightLayer.SKY, blockPos); final int packedLight = LightTexture.pack(blockLight, skyLight); - final Vector3f v0 = new Vector3f(p.subtract(n)); - final Vector3f v1 = new Vector3f(p.add(n)); + final Vector3f v0 = p.subtract(n).toVector3f(); + final Vector3f v1 = p.add(n).toVector3f(); cablePoints.add(new CablePoint(v0, v1, packedLight)); } diff --git a/src/main/java/li/cil/oc2/client/renderer/ProjectorDepthRenderer.java b/src/main/java/li/cil/oc2/client/renderer/ProjectorDepthRenderer.java index be6aba20..d9366b14 100644 --- a/src/main/java/li/cil/oc2/client/renderer/ProjectorDepthRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/ProjectorDepthRenderer.java @@ -13,9 +13,11 @@ import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import net.minecraftforge.client.event.ViewportEvent; +import org.joml.Matrix3f; +import org.joml.Matrix4f; +import org.joml.Quaternionf; +import org.joml.Vector3f; import li.cil.oc2.common.block.ProjectorBlock; import li.cil.oc2.common.blockentity.ProjectorBlockEntity; import li.cil.oc2.common.bus.device.vm.block.ProjectorDevice; @@ -203,7 +205,7 @@ public final class ProjectorDepthRenderer { * Suppresses fog rendering while rendering depth buffer for projectors. */ @SubscribeEvent - public static void handleFog(final EntityRenderersEvent event) { + public static void handleFog(final ViewportEvent.RenderFog event) { if (isRenderingProjectorDepth) { FogRenderer.setupNoFog(); } @@ -249,7 +251,7 @@ public final class ProjectorDepthRenderer { configureProjectorDepthCamera(level, projectorPos, facing.toYRot()); - RenderSystem.setProjectionMatrix(DEPTH_CAMERA_PROJECTION_MATRIX); + RenderSystem.setProjectionMatrix(DEPTH_CAMERA_PROJECTION_MATRIX, null); setupViewModelMatrix(viewModelStack); storeProjectorMatrix(projectorIndex, projectorPos, mainCameraPosition, viewModelStack); @@ -307,25 +309,23 @@ public final class ProjectorDepthRenderer { private static void setupViewModelMatrix(final PoseStack viewModelStack) { viewModelStack.setIdentity(); - viewModelStack.mulPose(Vector3f.YP.rotationDegrees(PROJECTOR_DEPTH_CAMERA.getYRot() + 180)); + viewModelStack.mulPose(new Quaternionf().rotateY((float) Math.toRadians(PROJECTOR_DEPTH_CAMERA.getYRot() + 180))); - final Matrix3f viewRotationMatrix = viewModelStack.last().normal().copy(); - if (viewRotationMatrix.invert()) { - RenderSystem.setInverseViewRotationMatrix(viewRotationMatrix); - } + final Matrix3f viewRotationMatrix = new Matrix3f(viewModelStack.last().normal()); + RenderSystem.setInverseViewRotationMatrix(viewRotationMatrix.invert()); } private static void storeProjectorMatrix(final int projectorIndex, final Vec3 projectorPos, final Vec3 mainCameraPosition, final PoseStack viewModelStack) { // Save model-view-projection matrix for mapping in compositing shader. We use the position relative to the // main camera here, so that the main camera can sit at the origin. This avoids loss of precision. - PROJECTOR_CAMERA_MATRICES[projectorIndex].load(DEPTH_CAMERA_PROJECTION_MATRIX); + PROJECTOR_CAMERA_MATRICES[projectorIndex] = new Matrix4f(DEPTH_CAMERA_PROJECTION_MATRIX); viewModelStack.pushPose(); viewModelStack.translate( mainCameraPosition.x() - projectorPos.x(), mainCameraPosition.y() - projectorPos.y(), mainCameraPosition.z() - projectorPos.z() ); - PROJECTOR_CAMERA_MATRICES[projectorIndex].multiply(viewModelStack.last().pose()); + PROJECTOR_CAMERA_MATRICES[projectorIndex].mul(viewModelStack.last().pose()); viewModelStack.popPose(); } @@ -409,12 +409,12 @@ public final class ProjectorDepthRenderer { } private static void prepareOrthographicRendering(final Minecraft minecraft) { - final Matrix4f screenProjectionMatrix = Matrix4f.orthographic( + final Matrix4f screenProjectionMatrix = new Matrix4f().orthoSymmetric( minecraft.getWindow().getWidth(), -minecraft.getWindow().getHeight(), 1000, 3000 ); - RenderSystem.setProjectionMatrix(screenProjectionMatrix); + RenderSystem.setProjectionMatrix(screenProjectionMatrix, null); final PoseStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.setIdentity(); @@ -423,8 +423,8 @@ public final class ProjectorDepthRenderer { } private static Matrix4f constructInverseMainCameraMatrix(final Matrix4f modelViewMatrix, final Matrix4f projectionMatrix) { - final Matrix4f inverseModelViewMatrix = projectionMatrix.copy(); - inverseModelViewMatrix.multiply(modelViewMatrix); + final Matrix4f inverseModelViewMatrix = new Matrix4f(projectionMatrix); + inverseModelViewMatrix.mul(modelViewMatrix); inverseModelViewMatrix.invert(); return inverseModelViewMatrix; } @@ -444,12 +444,12 @@ public final class ProjectorDepthRenderer { private static Matrix4f getFrustumMatrix(final float near, final float far, final float dist, final float left, final float right, final float top, final float bottom) { - return new Matrix4f(new float[]{ + return new Matrix4f( 2 * dist / (right - left), 0, (right + left) / (right - left), 0, 0, 2 * dist / (top - bottom), (top + bottom) / (top - bottom), 0, 0, 0, -(far + near) / (far - near), -(2 * far * near) / (far - near), - 0, 0, -1, 0, - }); + 0, 0, -1, 0 + ); } private static DynamicTexture getColorBuffer(final ProjectorBlockEntity projector) { @@ -559,14 +559,14 @@ public final class ProjectorDepthRenderer { instance = new ProjectorCameraEntity(level, BlockPos.ZERO, rotationY); } - instance.level = level; + instance.setLevel(level); instance.moveTo(pos.x(), pos.y(), pos.z(), rotationY, 0); return instance; } private ProjectorCameraEntity(final Level level, final BlockPos blockPos, final float rotationY) { - super(level, blockPos, rotationY, FakePlayerUtils.getFakePlayerProfile(), null); + super(level, blockPos, rotationY, FakePlayerUtils.getFakePlayerProfile()); } @Override diff --git a/src/main/java/li/cil/oc2/client/renderer/blockentity/ChargerRenderer.java b/src/main/java/li/cil/oc2/client/renderer/blockentity/ChargerRenderer.java index f45d2dc7..ce58305d 100644 --- a/src/main/java/li/cil/oc2/client/renderer/blockentity/ChargerRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/blockentity/ChargerRenderer.java @@ -4,7 +4,7 @@ package li.cil.oc2.client.renderer.blockentity; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; import li.cil.oc2.api.API; import li.cil.oc2.client.renderer.ModRenderType; import li.cil.oc2.common.blockentity.ChargerBlockEntity; diff --git a/src/main/java/li/cil/oc2/client/renderer/blockentity/ComputerRenderer.java b/src/main/java/li/cil/oc2/client/renderer/blockentity/ComputerRenderer.java index 914681a0..e3dee44b 100644 --- a/src/main/java/li/cil/oc2/client/renderer/blockentity/ComputerRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/blockentity/ComputerRenderer.java @@ -7,10 +7,10 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.RemovalNotification; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix4f; -import com.mojang.math.Quaternion; -import com.mojang.math.Vector3f; +import org.joml.Matrix4f; +import org.joml.Quaternionf; import li.cil.oc2.api.API; import li.cil.oc2.client.renderer.ModRenderType; import li.cil.oc2.common.block.ComputerBlock; @@ -82,7 +82,7 @@ public final class ComputerRenderer implements BlockEntityRenderer wrappedText = fontRenderer.getSplitter().splitLines(text, maxWidth, Style.EMPTY); if (wrappedText.size() == 1) { final int textWidth = fontRenderer.width(text); - fontRenderer.draw(stack, text, (maxWidth - textWidth) * 0.5f, 0, 0xEE3322); + draw(fontRenderer, stack, text, (maxWidth - textWidth) * 0.5f, 0, 0xEE3322); } else { for (int i = 0; i < wrappedText.size(); i++) { - fontRenderer.draw(stack, wrappedText.get(i).getString(), 0, i * fontRenderer.lineHeight, 0xEE3322); + draw(fontRenderer, stack, wrappedText.get(i).getString(), 0, i * fontRenderer.lineHeight, 0xEE3322); } } stack.popPose(); } + private void draw(Font font, PoseStack stack, Component text, float x, float y, int color) { + var batch = MultiBufferSource.immediate(Tesselator.getInstance().getBuilder()); + font.drawInBatch(text, x, y, color, false, stack.last().pose(), batch, Font.DisplayMode.NORMAL, 0, 15728880); + batch.endBatch(); + } + + private void draw(Font font, PoseStack stack, String text, float x, float y, int color) { + var batch = MultiBufferSource.immediate(Tesselator.getInstance().getBuilder()); + font.drawInBatch(text, x, y, color, false, stack.last().pose(), batch, Font.DisplayMode.NORMAL, 0, 15728880, false); + batch.endBatch(); + } + private void renderStatus(final Matrix4f matrix, final MultiBufferSource bufferSource) { renderStatus(matrix, bufferSource, 0); } 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 233e9c6d..ebf37528 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,7 +3,9 @@ package li.cil.oc2.client.renderer.blockentity; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Vector3f; +import net.minecraft.world.item.ItemDisplayContext; +import org.joml.Quaternionf; +import org.joml.Vector3f; import li.cil.oc2.common.block.DiskDriveBlock; import li.cil.oc2.common.blockentity.DiskDriveBlockEntity; import net.minecraft.client.Minecraft; @@ -38,13 +40,13 @@ public final class DiskDriveRenderer implements BlockEntityRenderer { @Override public void render(final Robot entity, final float entityYaw, final float partialTicks, final PoseStack stack, final MultiBufferSource bufferSource, final int packedLight) { final Robot.AnimationState state = entity.getAnimationState(); - state.update(partialTicks, entity.level.random); + state.update(partialTicks, entity.level().random); stack.pushPose(); // NB: we don't entityYaw given to use because that uses a plain lerp which can lead to ugly @@ -43,7 +44,10 @@ public final class RobotRenderer extends EntityRenderer { // alternatively prevent this wrapping or patch the prev value instead. final float partialRotation = Mth.degreesDifferenceAbs(entity.yRotO, entity.getYRot()) * partialTicks; final float rotation = Mth.approachDegrees(entity.yRotO, entity.getYRot(), partialRotation); - stack.mulPose(Vector3f.YN.rotationDegrees(rotation)); + + var axis = new Vector3f(0, -1, 0); + var rotationQuaternion = new Quaternionf().rotationAxis((float)Math.toRadians(rotation), axis.x, axis.y, axis.z); + stack.mulPose(rotationQuaternion); model.setupAnim(entity, 0, 0, 0, 0, 0); diff --git a/src/main/java/li/cil/oc2/client/renderer/entity/RobotWithoutLevelRenderer.java b/src/main/java/li/cil/oc2/client/renderer/entity/RobotWithoutLevelRenderer.java index d66c99a1..8fc93fb4 100644 --- a/src/main/java/li/cil/oc2/client/renderer/entity/RobotWithoutLevelRenderer.java +++ b/src/main/java/li/cil/oc2/client/renderer/entity/RobotWithoutLevelRenderer.java @@ -11,6 +11,7 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; public final class RobotWithoutLevelRenderer extends BlockEntityWithoutLevelRenderer { @@ -26,7 +27,7 @@ public final class RobotWithoutLevelRenderer extends BlockEntityWithoutLevelRend /////////////////////////////////////////////////////////////////// @Override - public void renderByItem(final ItemStack itemStack, final ItemTransforms.TransformType transformType, final PoseStack poseStack, final MultiBufferSource bufferSource, final int combinedLight, final int combinedOverlay) { + public void renderByItem(final ItemStack itemStack, final ItemDisplayContext transformType, final PoseStack poseStack, final MultiBufferSource bufferSource, final int combinedLight, final int combinedOverlay) { poseStack.pushPose(); poseStack.translate(0.5, 0, 0.5); diff --git a/src/main/java/li/cil/oc2/common/Main.java b/src/main/java/li/cil/oc2/common/Main.java index efe4de56..b2358e63 100644 --- a/src/main/java/li/cil/oc2/common/Main.java +++ b/src/main/java/li/cil/oc2/common/Main.java @@ -15,6 +15,7 @@ import li.cil.oc2.common.bus.device.data.FirmwareRegistry; import li.cil.oc2.common.bus.device.provider.ProviderRegistry; import li.cil.oc2.common.container.Containers; import li.cil.oc2.common.entity.Entities; +import li.cil.oc2.common.item.ItemGroup; import li.cil.oc2.common.item.Items; import li.cil.oc2.common.item.crafting.RecipeSerializers; import li.cil.oc2.common.serialization.ceres.Serializers; @@ -65,5 +66,7 @@ public final class Main { DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> Manuals::initialize); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> FMLJavaModLoadingContext.get().getModEventBus().register(ClientSetup.class)); + + ItemGroup.TAB_REGISTER.register(FMLJavaModLoadingContext.get().getModEventBus()); } } diff --git a/src/main/java/li/cil/oc2/common/block/Blocks.java b/src/main/java/li/cil/oc2/common/block/Blocks.java index 97e27ddf..b85a9f59 100644 --- a/src/main/java/li/cil/oc2/common/block/Blocks.java +++ b/src/main/java/li/cil/oc2/common/block/Blocks.java @@ -13,7 +13,7 @@ import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; public final class Blocks { - private static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, API.MOD_ID); + public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, API.MOD_ID); /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/block/BusCableBlock.java b/src/main/java/li/cil/oc2/common/block/BusCableBlock.java index 315c0007..0117c475 100644 --- a/src/main/java/li/cil/oc2/common/block/BusCableBlock.java +++ b/src/main/java/li/cil/oc2/common/block/BusCableBlock.java @@ -35,8 +35,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.EnumProperty; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.BlockHitResult; @@ -123,7 +124,8 @@ public final class BusCableBlock extends BaseEntityBlock { public BusCableBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); @@ -267,7 +269,7 @@ public final class BusCableBlock extends BaseEntityBlock { @SuppressWarnings("deprecation") @Override - public List getDrops(final BlockState state, final LootContext.Builder builder) { + public List getDrops(final BlockState state, final LootParams.Builder builder) { final List drops = new ArrayList<>(super.getDrops(state, builder)); if (state.getValue(HAS_FACADE)) { diff --git a/src/main/java/li/cil/oc2/common/block/ChargerBlock.java b/src/main/java/li/cil/oc2/common/block/ChargerBlock.java index 55e26b08..a0c34bd0 100644 --- a/src/main/java/li/cil/oc2/common/block/ChargerBlock.java +++ b/src/main/java/li/cil/oc2/common/block/ChargerBlock.java @@ -14,14 +14,15 @@ import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import javax.annotation.Nullable; public final class ChargerBlock extends HalfTransparentBlock implements EntityBlock { public ChargerBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(HorizontalDirectionalBlock.FACING, Direction.NORTH)); diff --git a/src/main/java/li/cil/oc2/common/block/ComputerBlock.java b/src/main/java/li/cil/oc2/common/block/ComputerBlock.java index b84b34eb..42d38a3e 100644 --- a/src/main/java/li/cil/oc2/common/block/ComputerBlock.java +++ b/src/main/java/li/cil/oc2/common/block/ComputerBlock.java @@ -39,7 +39,7 @@ import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; @@ -74,7 +74,8 @@ public final class ComputerBlock extends HorizontalDirectionalBlock implements E public ComputerBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); @@ -82,12 +83,6 @@ public final class ComputerBlock extends HorizontalDirectionalBlock implements E /////////////////////////////////////////////////////////////////// - @Override - public void fillItemCategory(final CreativeModeTab group, final NonNullList items) { - items.add(getComputerWithFlash()); - items.add(getPreconfiguredComputer()); - } - @OnlyIn(Dist.CLIENT) @Override public void appendHoverText(final ItemStack stack, @Nullable final BlockGetter level, final List tooltip, final TooltipFlag advanced) { @@ -123,11 +118,6 @@ public final class ComputerBlock extends HorizontalDirectionalBlock implements E return getSignal(state, level, pos, side); } - @Override - public boolean shouldCheckWeakPower(final BlockState state, final LevelReader level, final BlockPos pos, final Direction side) { - return false; - } - @SuppressWarnings("deprecation") @Override public void neighborChanged(final BlockState state, final Level level, final BlockPos pos, final Block changedBlock, final BlockPos changedBlockPos, final boolean isMoving) { diff --git a/src/main/java/li/cil/oc2/common/block/CreativeEnergyBlock.java b/src/main/java/li/cil/oc2/common/block/CreativeEnergyBlock.java index dae445c5..e3b12da7 100644 --- a/src/main/java/li/cil/oc2/common/block/CreativeEnergyBlock.java +++ b/src/main/java/li/cil/oc2/common/block/CreativeEnergyBlock.java @@ -13,14 +13,15 @@ import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import javax.annotation.Nullable; public final class CreativeEnergyBlock extends Block implements EntityBlock { public CreativeEnergyBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(-1, 3600000) .noLootTable()); diff --git a/src/main/java/li/cil/oc2/common/block/DiskDriveBlock.java b/src/main/java/li/cil/oc2/common/block/DiskDriveBlock.java index 04ee6989..dd184f87 100644 --- a/src/main/java/li/cil/oc2/common/block/DiskDriveBlock.java +++ b/src/main/java/li/cil/oc2/common/block/DiskDriveBlock.java @@ -19,7 +19,7 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.BlockHitResult; import javax.annotation.Nullable; @@ -27,7 +27,8 @@ import javax.annotation.Nullable; public final class DiskDriveBlock extends HorizontalDirectionalBlock implements EntityBlock { public DiskDriveBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); diff --git a/src/main/java/li/cil/oc2/common/block/FlashMemoryFlasherBlock.java b/src/main/java/li/cil/oc2/common/block/FlashMemoryFlasherBlock.java index facf611d..a8a2191a 100644 --- a/src/main/java/li/cil/oc2/common/block/FlashMemoryFlasherBlock.java +++ b/src/main/java/li/cil/oc2/common/block/FlashMemoryFlasherBlock.java @@ -20,7 +20,7 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.BlockHitResult; import javax.annotation.Nullable; @@ -28,7 +28,8 @@ import javax.annotation.Nullable; public final class FlashMemoryFlasherBlock extends HorizontalDirectionalBlock implements EntityBlock { public FlashMemoryFlasherBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); diff --git a/src/main/java/li/cil/oc2/common/block/KeyboardBlock.java b/src/main/java/li/cil/oc2/common/block/KeyboardBlock.java index 355e03e6..7c6675e7 100644 --- a/src/main/java/li/cil/oc2/common/block/KeyboardBlock.java +++ b/src/main/java/li/cil/oc2/common/block/KeyboardBlock.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; @@ -42,7 +42,7 @@ public final class KeyboardBlock extends HorizontalDirectionalBlock implements E /////////////////////////////////////////////////////////////////// public KeyboardBlock() { - super(Properties.of(Material.METAL).sound(SoundType.METAL).strength(1.5f, 6.0f)); + super(Properties.of().mapColor(MapColor.METAL).sound(SoundType.METAL).strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); } diff --git a/src/main/java/li/cil/oc2/common/block/NetworkConnectorBlock.java b/src/main/java/li/cil/oc2/common/block/NetworkConnectorBlock.java index efa8fe76..d8df4ca3 100644 --- a/src/main/java/li/cil/oc2/common/block/NetworkConnectorBlock.java +++ b/src/main/java/li/cil/oc2/common/block/NetworkConnectorBlock.java @@ -19,7 +19,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.AttachFace; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; @@ -38,7 +38,8 @@ public final class NetworkConnectorBlock extends FaceAttachedHorizontalDirection public NetworkConnectorBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any() diff --git a/src/main/java/li/cil/oc2/common/block/NetworkHubBlock.java b/src/main/java/li/cil/oc2/common/block/NetworkHubBlock.java index 53bc2a88..3f82a34e 100644 --- a/src/main/java/li/cil/oc2/common/block/NetworkHubBlock.java +++ b/src/main/java/li/cil/oc2/common/block/NetworkHubBlock.java @@ -15,14 +15,15 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import javax.annotation.Nullable; public final class NetworkHubBlock extends HorizontalDirectionalBlock implements EntityBlock { public NetworkHubBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); diff --git a/src/main/java/li/cil/oc2/common/block/NetworkSwitchBlock.java b/src/main/java/li/cil/oc2/common/block/NetworkSwitchBlock.java index 03b62cc2..079159d4 100644 --- a/src/main/java/li/cil/oc2/common/block/NetworkSwitchBlock.java +++ b/src/main/java/li/cil/oc2/common/block/NetworkSwitchBlock.java @@ -13,14 +13,15 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import javax.annotation.Nullable; public final class NetworkSwitchBlock extends HorizontalDirectionalBlock implements EntityBlock { public NetworkSwitchBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); diff --git a/src/main/java/li/cil/oc2/common/block/PciCardCageBlock.java b/src/main/java/li/cil/oc2/common/block/PciCardCageBlock.java index 978965b9..ea0c6670 100644 --- a/src/main/java/li/cil/oc2/common/block/PciCardCageBlock.java +++ b/src/main/java/li/cil/oc2/common/block/PciCardCageBlock.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -45,7 +45,8 @@ public final class PciCardCageBlock extends HorizontalDirectionalBlock implement public PciCardCageBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .lightLevel(state -> state.getValue(LIT) ? 8 : 0) .strength(1.5f, 6.0f)); diff --git a/src/main/java/li/cil/oc2/common/block/ProjectorBlock.java b/src/main/java/li/cil/oc2/common/block/ProjectorBlock.java index d8ce2862..adc1d1ee 100644 --- a/src/main/java/li/cil/oc2/common/block/ProjectorBlock.java +++ b/src/main/java/li/cil/oc2/common/block/ProjectorBlock.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -45,7 +45,8 @@ public final class ProjectorBlock extends HorizontalDirectionalBlock implements public ProjectorBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .lightLevel(state -> state.getValue(LIT) ? 8 : 0) .strength(1.5f, 6.0f)); diff --git a/src/main/java/li/cil/oc2/common/block/RedstoneInterfaceBlock.java b/src/main/java/li/cil/oc2/common/block/RedstoneInterfaceBlock.java index 30b9bc36..e668b060 100644 --- a/src/main/java/li/cil/oc2/common/block/RedstoneInterfaceBlock.java +++ b/src/main/java/li/cil/oc2/common/block/RedstoneInterfaceBlock.java @@ -16,14 +16,15 @@ import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import javax.annotation.Nullable; public final class RedstoneInterfaceBlock extends HorizontalDirectionalBlock implements EntityBlock { public RedstoneInterfaceBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); @@ -55,11 +56,6 @@ public final class RedstoneInterfaceBlock extends HorizontalDirectionalBlock imp return super.getSignal(state, level, pos, side); } - @Override - public boolean shouldCheckWeakPower(final BlockState state, final LevelReader level, final BlockPos pos, final Direction side) { - return false; - } - @SuppressWarnings("deprecation") @Override public int getDirectSignal(final BlockState state, final BlockGetter level, final BlockPos pos, final Direction side) { diff --git a/src/main/java/li/cil/oc2/common/block/VxlanBlock.java b/src/main/java/li/cil/oc2/common/block/VxlanBlock.java index 57c4b364..d8854498 100644 --- a/src/main/java/li/cil/oc2/common/block/VxlanBlock.java +++ b/src/main/java/li/cil/oc2/common/block/VxlanBlock.java @@ -16,14 +16,15 @@ import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MapColor; import javax.annotation.Nullable; public final class VxlanBlock extends HorizontalDirectionalBlock implements EntityBlock { public VxlanBlock() { super(Properties - .of(Material.METAL) + .of() + .mapColor(MapColor.METAL) .sound(SoundType.METAL) .strength(1.5f, 6.0f)); registerDefaultState(getStateDefinition().any().setValue(FACING, Direction.NORTH)); diff --git a/src/main/java/li/cil/oc2/common/blockentity/BusCableBlockEntity.java b/src/main/java/li/cil/oc2/common/blockentity/BusCableBlockEntity.java index bf3e9957..cea17a6f 100644 --- a/src/main/java/li/cil/oc2/common/blockentity/BusCableBlockEntity.java +++ b/src/main/java/li/cil/oc2/common/blockentity/BusCableBlockEntity.java @@ -130,7 +130,7 @@ public final class BusCableBlockEntity extends ModBlockEntity { stack = ItemStack.EMPTY; } - if (ItemStack.isSame(stack, facade)) { + if (ItemStack.isSameItem(stack, facade)) { return; } @@ -167,7 +167,7 @@ public final class BusCableBlockEntity extends ModBlockEntity { public void handleNeighborChanged(final BlockPos pos) { final BlockPos toPos = pos.subtract(getBlockPos()); - final Direction side = Direction.fromNormal(toPos.getX(), toPos.getY(), toPos.getZ()); + final Direction side = Direction.fromDelta(toPos.getX(), toPos.getY(), toPos.getZ()); if (side != null) { busElement.updateDevicesForNeighbor(side); } diff --git a/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java b/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java index 9e24cb51..53163a02 100644 --- a/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java +++ b/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java @@ -18,6 +18,7 @@ import li.cil.oc2.common.util.ThrottledSoundEmitter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.state.BlockState; @@ -85,7 +86,7 @@ public final class DiskDriveBlockEntity extends ModBlockEntity implements DiskDr ItemStackUtils.spawnAsEntity(level, getBlockPos().relative(facing), stack, facing).ifPresent(entity -> { if (player != null) { entity.setNoPickUpDelay(); - entity.setOwner(player.getUUID()); + entity.setThrower(player.getUUID()); } }); } diff --git a/src/main/java/li/cil/oc2/common/blockentity/FlashMemoryFlasherBlockEntity.java b/src/main/java/li/cil/oc2/common/blockentity/FlashMemoryFlasherBlockEntity.java index d4758e5c..1ebc1a4e 100644 --- a/src/main/java/li/cil/oc2/common/blockentity/FlashMemoryFlasherBlockEntity.java +++ b/src/main/java/li/cil/oc2/common/blockentity/FlashMemoryFlasherBlockEntity.java @@ -87,7 +87,7 @@ public final class FlashMemoryFlasherBlockEntity extends ModBlockEntity implemen ItemStackUtils.spawnAsEntity(level, getBlockPos().relative(facing), stack, facing).ifPresent(entity -> { if (player != null) { entity.setNoPickUpDelay(); - entity.setOwner(player.getUUID()); + entity.setThrower(player.getUUID()); } }); } diff --git a/src/main/java/li/cil/oc2/common/bus/device/rpc/item/BlockOperationsModuleDevice.java b/src/main/java/li/cil/oc2/common/bus/device/rpc/item/BlockOperationsModuleDevice.java index 77a1b00a..d00cb565 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/rpc/item/BlockOperationsModuleDevice.java +++ b/src/main/java/li/cil/oc2/common/bus/device/rpc/item/BlockOperationsModuleDevice.java @@ -73,7 +73,7 @@ public final class BlockOperationsModuleDevice extends AbstractItemRPCDevice { @Override public void deserializeNBT(final CompoundTag tag) { - lastOperation = Mth.clamp(tag.getLong(LAST_OPERATION_TAG_NAME), 0, entity.level.getGameTime()); + lastOperation = (long) Mth.clamp(tag.getLong(LAST_OPERATION_TAG_NAME), 0, entity.level().getGameTime()); } @Callback @@ -89,7 +89,7 @@ public final class BlockOperationsModuleDevice extends AbstractItemRPCDevice { beginCooldown(); - final Level level = entity.level; + final Level level = entity.level(); if (!(level instanceof final ServerLevel serverLevel)) { return false; } @@ -129,7 +129,7 @@ public final class BlockOperationsModuleDevice extends AbstractItemRPCDevice { beginCooldown(); - final Level level = entity.level; + final Level level = entity.level(); if (!(level instanceof final ServerLevel serverLevel)) { return false; } @@ -212,15 +212,15 @@ public final class BlockOperationsModuleDevice extends AbstractItemRPCDevice { /////////////////////////////////////////////////////////////////// private void beginCooldown() { - lastOperation = entity.level.getGameTime(); + lastOperation = entity.level().getGameTime(); } private boolean isOnCooldown() { - return entity.level.getGameTime() - lastOperation < COOLDOWN; + return entity.level().getGameTime() - lastOperation < COOLDOWN; } private List getItemsInRange() { - return entity.level.getEntitiesOfClass(ItemEntity.class, entity.getBoundingBox().inflate(2)); + return entity.level().getEntitiesOfClass(ItemEntity.class, entity.getBoundingBox().inflate(2)); } private boolean tryHarvestBlock(final ServerLevel level, final BlockPos blockPos) { diff --git a/src/main/java/li/cil/oc2/common/bus/device/rpc/item/InventoryOperationsModuleDevice.java b/src/main/java/li/cil/oc2/common/bus/device/rpc/item/InventoryOperationsModuleDevice.java index 0ef6bd04..28929a9f 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/rpc/item/InventoryOperationsModuleDevice.java +++ b/src/main/java/li/cil/oc2/common/bus/device/rpc/item/InventoryOperationsModuleDevice.java @@ -9,6 +9,7 @@ import li.cil.oc2.api.util.RobotOperationSide; import li.cil.oc2.common.capabilities.Capabilities; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; @@ -220,15 +221,16 @@ public final class InventoryOperationsModuleDevice extends AbstractItemRPCDevice private Stream getEntityItemHandlersAt(final Vec3 position, final Direction side) { final AABB bounds = AABB.unitCubeFromLowerCorner(position.subtract(0.5, 0.5, 0.5)); - return entity.level.getEntities(entity, bounds).stream() + return entity.level().getEntities(entity, bounds).stream() .map(e -> e.getCapability(Capabilities.itemHandler(), side)) .filter(LazyOptional::isPresent) .map(c -> c.orElseThrow(AssertionError::new)); } private Stream getBlockItemHandlersAt(final Vec3 position, final Direction side) { - final BlockPos pos = new BlockPos(position); - final BlockEntity blockEntity = entity.level.getBlockEntity(pos); + Vec3i posi = new Vec3i((int) position.x, (int) position.y, (int) position.z); + final BlockPos pos = new BlockPos(posi); + final BlockEntity blockEntity = entity.level().getBlockEntity(pos); if (blockEntity == null) { return Stream.empty(); } @@ -242,7 +244,7 @@ public final class InventoryOperationsModuleDevice extends AbstractItemRPCDevice } private List getItemsInRange() { - return entity.level.getEntitiesOfClass(ItemEntity.class, entity.getBoundingBox().inflate(1)); + return entity.level().getEntitiesOfClass(ItemEntity.class, entity.getBoundingBox().inflate(1)); } private int takeFromWorld(final int count) { diff --git a/src/main/java/li/cil/oc2/common/container/AbstractContainer.java b/src/main/java/li/cil/oc2/common/container/AbstractContainer.java index 62e908c5..82c205da 100644 --- a/src/main/java/li/cil/oc2/common/container/AbstractContainer.java +++ b/src/main/java/li/cil/oc2/common/container/AbstractContainer.java @@ -58,7 +58,7 @@ public abstract class AbstractContainer extends AbstractContainerMenu { } final ItemStack intoStack = into.getItem(); - final boolean itemsAreEqual = fromStack.sameItem(intoStack) && ItemStack.tagMatches(fromStack, intoStack); + final boolean itemsAreEqual = fromStack.equals(intoStack, false); if (!itemsAreEqual) { continue; } diff --git a/src/main/java/li/cil/oc2/common/container/ComputerInventoryContainer.java b/src/main/java/li/cil/oc2/common/container/ComputerInventoryContainer.java index ac09797a..27ac806a 100644 --- a/src/main/java/li/cil/oc2/common/container/ComputerInventoryContainer.java +++ b/src/main/java/li/cil/oc2/common/container/ComputerInventoryContainer.java @@ -35,7 +35,7 @@ public final class ComputerInventoryContainer extends AbstractComputerContainer public static ComputerInventoryContainer createClient(final int id, final Inventory playerInventory, final FriendlyByteBuf data) { final BlockPos pos = data.readBlockPos(); - final BlockEntity blockEntity = playerInventory.player.level.getBlockEntity(pos); + final BlockEntity blockEntity = playerInventory.player.level().getBlockEntity(pos); if (blockEntity instanceof final ComputerBlockEntity computer) { return new ComputerInventoryContainer(id, computer, playerInventory.player, createClientEnergyInfo()); } diff --git a/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java index 0e5e51e0..b96a3207 100644 --- a/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/ComputerTerminalContainer.java @@ -33,7 +33,7 @@ public final class ComputerTerminalContainer extends AbstractComputerContainer { public static ComputerTerminalContainer createClient(final int id, final Inventory inventory, final FriendlyByteBuf data) { final BlockPos pos = data.readBlockPos(); - final BlockEntity blockEntity = inventory.player.level.getBlockEntity(pos); + final BlockEntity blockEntity = inventory.player.level().getBlockEntity(pos); if (blockEntity instanceof final ComputerBlockEntity computer) { return new ComputerTerminalContainer(id, inventory.player, computer, createClientEnergyInfo()); } diff --git a/src/main/java/li/cil/oc2/common/container/NetworkTunnelContainer.java b/src/main/java/li/cil/oc2/common/container/NetworkTunnelContainer.java index 34a5139c..c24db235 100644 --- a/src/main/java/li/cil/oc2/common/container/NetworkTunnelContainer.java +++ b/src/main/java/li/cil/oc2/common/container/NetworkTunnelContainer.java @@ -86,7 +86,7 @@ public final class NetworkTunnelContainer extends AbstractContainer { public void removed(final Player player) { super.removed(player); - if (!player.getLevel().isClientSide()) { + if (!player.level().isClientSide()) { clearContainer(player, linkSlot); } } diff --git a/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java b/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java index 696a20e7..e9e3ee08 100644 --- a/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java +++ b/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java @@ -35,7 +35,7 @@ public final class RobotInventoryContainer extends AbstractRobotContainer { public static RobotInventoryContainer createClient(final int id, final Inventory inventory, final FriendlyByteBuf data) { final int entityId = data.readVarInt(); - final Entity entity = inventory.player.level.getEntity(entityId); + final Entity entity = inventory.player.level().getEntity(entityId); if (entity instanceof final Robot robot) { return new RobotInventoryContainer(id, robot, inventory.player, createClientEnergyInfo()); } diff --git a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java index ed77b4ab..31f80e76 100644 --- a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java @@ -34,7 +34,7 @@ public final class RobotTerminalContainer extends AbstractRobotContainer { public static RobotTerminalContainer createClient(final int id, final Inventory inventory, final FriendlyByteBuf data) { final int entityId = data.readVarInt(); - final Entity entity = inventory.player.level.getEntity(entityId); + final Entity entity = inventory.player.level().getEntity(entityId); if (entity instanceof final Robot robot) { return new RobotTerminalContainer(id, inventory.player, robot, createClientEnergyInfo()); } diff --git a/src/main/java/li/cil/oc2/common/entity/Robot.java b/src/main/java/li/cil/oc2/common/entity/Robot.java index 18b7d9ee..311dae4b 100644 --- a/src/main/java/li/cil/oc2/common/entity/Robot.java +++ b/src/main/java/li/cil/oc2/common/entity/Robot.java @@ -18,7 +18,6 @@ import li.cil.oc2.common.capabilities.Capabilities; import li.cil.oc2.common.container.FixedSizeItemStackHandler; import li.cil.oc2.common.container.RobotInventoryContainer; import li.cil.oc2.common.container.RobotTerminalContainer; -import li.cil.oc2.common.energy.EnergyStorageItemStack; import li.cil.oc2.common.energy.FixedEnergyStorage; import li.cil.oc2.common.entity.robot.*; import li.cil.oc2.common.integration.Wrenches; @@ -38,6 +37,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; @@ -58,7 +58,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -205,13 +205,13 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R } public void start() { - if (!level.isClientSide()) { + if (!level().isClientSide()) { virtualMachine.start(); } } public void stop() { - if (!level.isClientSide()) { + if (!level().isClientSide()) { virtualMachine.stop(); } } @@ -247,12 +247,12 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R spawnAtLocation(stack); discard(); - LevelUtils.playSound(level, blockPosition(), SoundType.METAL, SoundType::getBreakSound); + LevelUtils.playSound(level(), blockPosition(), SoundType.METAL, SoundType::getBreakSound); } @Override public void tick() { - final boolean isClient = level.isClientSide(); + final boolean isClient = level().isClientSide(); if (firstTick) { if (isClient) { @@ -278,7 +278,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R actionProcessor.tick(); - if (!isClient && level instanceof final ServerLevel serverLevel) { + if (!isClient && level() instanceof final ServerLevel serverLevel) { final VoxelShape shape = Shapes.create(getBoundingBox()); final Cursor3D iterator = getBlockPosIterator(); while (iterator.advance()) { @@ -296,8 +296,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R final VoxelShape blockShape = blockState.getCollisionShape(serverLevel, mutablePosition); if (Shapes.joinIsNotEmpty(shape, blockShape.move(x, y, z), BooleanOp.AND)) { final BlockEntity blockEntity = serverLevel.getBlockEntity(mutablePosition); - final LootContext.Builder builder = new LootContext.Builder(serverLevel) - .withRandom(serverLevel.random) + final LootParams.Builder builder = new LootParams.Builder(serverLevel) .withParameter(LootContextParams.THIS_ENTITY, this) .withParameter(LootContextParams.ORIGIN, position()) .withParameter(LootContextParams.TOOL, ItemStack.EMPTY) @@ -324,7 +323,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R @Override public InteractionResult interact(final Player player, final InteractionHand hand) { final ItemStack stack = player.getItemInHand(hand); - if (!level.isClientSide()) { + if (!level().isClientSide()) { if (Wrenches.isWrench(stack)) { if (player.isShiftKeyDown()) { dropSelf(); @@ -340,11 +339,11 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R } } - return InteractionResult.sidedSuccess(level.isClientSide()); + return InteractionResult.sidedSuccess(level().isClientSide()); } @Override - public Packet getAddEntityPacket() { + public Packet getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } @@ -352,7 +351,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R public void setRemoved(final RemovalReason reason) { super.setRemoved(reason); - if (!level.isClientSide()) { + if (!level().isClientSide()) { // Full unload to release out-of-nbt persisted runtime-only data such as ram. virtualMachine.stop(); virtualMachine.dispose(); @@ -453,7 +452,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R @Override protected Vec3 limitPistonMovement(final Vec3 pos) { - lastPistonMovement = level.getGameTime(); + lastPistonMovement = level().getGameTime(); return super.limitPistonMovement(pos); } @@ -475,7 +474,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R } private void handleChunkUnload(final ChunkEvent.Unload event) { - if (event.getLevel() != level) { + if (event.getLevel() != level()) { return; } @@ -490,7 +489,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R } private void handleWorldUnload(final LevelEvent.Unload event) { - if (event.getLevel() != level) { + if (event.getLevel() != level()) { return; } @@ -627,7 +626,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R } public void tick() { - if (level.isClientSide()) { + if (level().isClientSide()) { RobotActions.performClient(Robot.this); } else { if (action != null) { @@ -710,7 +709,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R } private boolean addAction(final AbstractRobotAction action) { - if (level.isClientSide()) { + if (level().isClientSide()) { return false; } @@ -749,7 +748,7 @@ public final class Robot extends Entity implements li.cil.oc2.api.capabilities.R @Override protected void onChanged() { super.onChanged(); - if (!level.isClientSide()) { + if (!level().isClientSide()) { virtualMachine.busController.scheduleBusScan(); } } diff --git a/src/main/java/li/cil/oc2/common/entity/robot/RobotMovementAction.java b/src/main/java/li/cil/oc2/common/entity/robot/RobotMovementAction.java index ae800651..c7240c33 100644 --- a/src/main/java/li/cil/oc2/common/entity/robot/RobotMovementAction.java +++ b/src/main/java/li/cil/oc2/common/entity/robot/RobotMovementAction.java @@ -152,8 +152,8 @@ public final class RobotMovementAction extends AbstractRobotAction { moveTowards(robot, targetPos); final boolean didCollide = robot.horizontalCollision || robot.verticalCollision; - final long gameTime = robot.level.getGameTime(); - if (didCollide && !robot.level.isClientSide() + final long gameTime = robot.level().getGameTime(); + if (didCollide && !robot.level().isClientSide() && robot.getLastPistonMovement() < gameTime - 1) { final BlockPos newStart = target; target = start; diff --git a/src/main/java/li/cil/oc2/common/item/BusInterfaceItem.java b/src/main/java/li/cil/oc2/common/item/BusInterfaceItem.java index 621e803c..0dbedce3 100644 --- a/src/main/java/li/cil/oc2/common/item/BusInterfaceItem.java +++ b/src/main/java/li/cil/oc2/common/item/BusInterfaceItem.java @@ -68,13 +68,6 @@ public final class BusInterfaceItem extends ModBlockItem { return getOrCreateDescriptionId(); } - @Override - public void fillItemCategory(final CreativeModeTab tab, final NonNullList items) { - if (this.allowedIn(tab)) { - items.add(new ItemStack(this)); - } - } - @Override public void registerBlocks(final Map map, final Item item) { } diff --git a/src/main/java/li/cil/oc2/common/item/ChargerItem.java b/src/main/java/li/cil/oc2/common/item/ChargerItem.java index 4e1f68f7..1ce0decd 100644 --- a/src/main/java/li/cil/oc2/common/item/ChargerItem.java +++ b/src/main/java/li/cil/oc2/common/item/ChargerItem.java @@ -14,11 +14,4 @@ public final class ChargerItem extends ModBlockItem { } /////////////////////////////////////////////////////////////////// - - @Override - public void fillItemCategory(final CreativeModeTab tab, final NonNullList items) { - if (Config.chargerUseEnergy()) { - super.fillItemCategory(tab, items); - } - } } diff --git a/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java b/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java index 7dc16c79..fad4ac90 100644 --- a/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java +++ b/src/main/java/li/cil/oc2/common/item/HardDriveWithExternalDataItem.java @@ -29,20 +29,6 @@ public final class HardDriveWithExternalDataItem extends AbstractBlockDeviceItem /////////////////////////////////////////////////////////////////// - @Override - public void fillItemCategory(final CreativeModeTab tab, final NonNullList items) { - super.fillItemCategory(tab, items); - - BlockDeviceDataRegistry.values().forEach(data -> { - if (!Objects.equals(BlockDeviceDataRegistry.getKey(data), getDefaultData())) { - final ItemStack stack = withData(data); - if (!stack.isEmpty()) { - items.add(stack); - } - } - }); - } - @Override public int getColor(final ItemStack stack) { return hasCustomColor(stack) ? DyeableLeatherItem.super.getColor(stack) : defaultColor; 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 a3bf23b9..f6409e1f 100644 --- a/src/main/java/li/cil/oc2/common/item/ItemGroup.java +++ b/src/main/java/li/cil/oc2/common/item/ItemGroup.java @@ -3,13 +3,111 @@ package li.cil.oc2.common.item; import li.cil.oc2.api.API; +import li.cil.oc2.api.bus.device.DeviceTypes; +import li.cil.oc2.common.block.Blocks; +import li.cil.oc2.common.block.ComputerBlock; +import li.cil.oc2.common.util.NBTUtils; +import net.minecraft.core.registries.Registries; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.IForgeRegistry; +import net.minecraftforge.registries.RegistryObject; + +import static li.cil.oc2.common.Constants.BLOCK_ENTITY_TAG_NAME_IN_ITEM; +import static li.cil.oc2.common.Constants.ITEMS_TAG_NAME; +import static li.cil.oc2.common.util.NBTUtils.makeInventoryTag; +import static li.cil.oc2.common.util.RegistryUtils.key; +import static li.cil.oc2.common.util.TranslationUtils.text; public final class ItemGroup { - public static final net.minecraft.world.item.CreativeModeTab COMMON = new net.minecraft.world.item.CreativeModeTab(API.MOD_ID + ".common") { - @Override - public ItemStack makeIcon() { - return new ItemStack(Items.COMPUTER.get()); - } - }; + public static final DeferredRegister TAB_REGISTER = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, API.MOD_ID); + + public static final RegistryObject COMMON_TAB = TAB_REGISTER.register("common", () -> CreativeModeTab.builder() + // Set name of tab to display + .title(Component.translatable("item_group." + API.MOD_ID + ".common")) + // Set icon of creative tab + .icon(() -> new ItemStack(Items.COMPUTER.get())) + // Add default items to tab + .displayItems((params, output) -> { + // Items + output.accept(Items.BUS_CABLE.get()); + output.accept(Items.BUS_INTERFACE.get()); + output.accept(Items.CHARGER.get()); + // Computer With Flash + ItemStack computerWithFlash = new ItemStack(Blocks.COMPUTER.get()); + + final CompoundTag itemsTag = NBTUtils.getOrCreateChildTag(computerWithFlash.getOrCreateTag(), BLOCK_ENTITY_TAG_NAME_IN_ITEM, ITEMS_TAG_NAME); + itemsTag.put(key(DeviceTypes.FLASH_MEMORY), makeInventoryTag( + new ItemStack(Items.FLASH_MEMORY_CUSTOM.get()) + )); + + output.accept(computerWithFlash); + + // Preconfigured Computer + ItemStack preconfiguredComputer = new ItemStack(Blocks.COMPUTER.get()); + + final CompoundTag preconfiguredItemsTag = NBTUtils.getOrCreateChildTag(preconfiguredComputer.getOrCreateTag(), BLOCK_ENTITY_TAG_NAME_IN_ITEM, ITEMS_TAG_NAME); + preconfiguredItemsTag.put(key(DeviceTypes.FLASH_MEMORY), makeInventoryTag( + new ItemStack(Items.FLASH_MEMORY_CUSTOM.get()) + )); + preconfiguredItemsTag.put(key(DeviceTypes.MEMORY), makeInventoryTag( + new ItemStack(Items.MEMORY_LARGE.get()), + new ItemStack(Items.MEMORY_LARGE.get()), + new ItemStack(Items.MEMORY_LARGE.get()), + new ItemStack(Items.MEMORY_LARGE.get()) + )); + preconfiguredItemsTag.put(key(DeviceTypes.HARD_DRIVE), makeInventoryTag( + new ItemStack(Items.HARD_DRIVE_CUSTOM.get()) + )); + preconfiguredItemsTag.put(key(DeviceTypes.CARD), makeInventoryTag( + new ItemStack(Items.NETWORK_INTERFACE_CARD.get()) + )); + + preconfiguredComputer.setHoverName(text("block.{mod}.computer.preconfigured")); + + output.accept(preconfiguredComputer); + + // Normal Items Again + output.accept(Items.CREATIVE_ENERGY.get()); + output.accept(Items.DISK_DRIVE.get()); + output.accept(Items.FLASH_MEMORY_FLASHER.get()); + output.accept(Items.KEYBOARD.get()); + output.accept(Items.NETWORK_CONNECTOR.get()); + output.accept(Items.NETWORK_HUB.get()); + output.accept(Items.PROJECTOR.get()); + output.accept(Items.REDSTONE_INTERFACE.get()); + output.accept(Items.WRENCH.get()); + output.accept(Items.MANUAL.get()); + output.accept(Items.ROBOT.get()); + output.accept(Items.NETWORK_CABLE.get()); + output.accept(Items.MEMORY_SMALL.get()); + output.accept(Items.MEMORY_MEDIUM.get()); + output.accept(Items.MEMORY_LARGE.get()); + output.accept(Items.HARD_DRIVE_SMALL.get()); + output.accept(Items.HARD_DRIVE_MEDIUM.get()); + output.accept(Items.HARD_DRIVE_LARGE.get()); + output.accept(Items.HARD_DRIVE_CUSTOM.get()); + output.accept(Items.FLASH_MEMORY.get()); + output.accept(Items.FLASH_MEMORY_CUSTOM.get()); + output.accept(Items.FLOPPY.get()); + output.accept(Items.REDSTONE_INTERFACE_CARD.get()); + output.accept(Items.NETWORK_INTERFACE_CARD.get()); + output.accept(Items.NETWORK_TUNNEL_CARD.get()); + output.accept(Items.FILE_IMPORT_EXPORT_CARD.get()); + output.accept(Items.SOUND_CARD.get()); + output.accept(Items.INVENTORY_OPERATIONS_MODULE.get()); + output.accept(Items.BLOCK_OPERATIONS_MODULE.get()); + output.accept(Items.NETWORK_TUNNEL_MODULE.get()); + output.accept(Items.TRANSISTOR.get()); + output.accept(Items.CIRCUIT_BOARD.get()); + output.accept(Items.NETWORK_SWITCH.get()); + output.accept(Items.VXLAN_HUB.get()); + output.accept(Items.PCI_CARD_CAGE.get()); + }) + .build() + ); } diff --git a/src/main/java/li/cil/oc2/common/item/ManualItem.java b/src/main/java/li/cil/oc2/common/item/ManualItem.java index 0d7aac41..33bc0a82 100644 --- a/src/main/java/li/cil/oc2/common/item/ManualItem.java +++ b/src/main/java/li/cil/oc2/common/item/ManualItem.java @@ -23,7 +23,7 @@ import java.util.List; public final class ManualItem extends AbstractManualItem { public ManualItem() { - super(new Item.Properties().tab(ItemGroup.COMMON)); + super(new Item.Properties()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/item/ModBlockItem.java b/src/main/java/li/cil/oc2/common/item/ModBlockItem.java index c9ebdd8b..356565a7 100644 --- a/src/main/java/li/cil/oc2/common/item/ModBlockItem.java +++ b/src/main/java/li/cil/oc2/common/item/ModBlockItem.java @@ -17,7 +17,7 @@ import java.util.List; public class ModBlockItem extends BlockItem { public ModBlockItem(final Block block, final Properties properties) { - super(block, properties.tab(ItemGroup.COMMON)); + super(block, properties); } public ModBlockItem(final Block block) { diff --git a/src/main/java/li/cil/oc2/common/item/ModItem.java b/src/main/java/li/cil/oc2/common/item/ModItem.java index e7adf821..393e9e45 100644 --- a/src/main/java/li/cil/oc2/common/item/ModItem.java +++ b/src/main/java/li/cil/oc2/common/item/ModItem.java @@ -16,7 +16,7 @@ import java.util.List; public class ModItem extends Item { public ModItem(final Properties properties) { - super(properties.tab(ItemGroup.COMMON)); + super(properties); } public ModItem() { diff --git a/src/main/java/li/cil/oc2/common/item/NetworkInterfaceCardItem.java b/src/main/java/li/cil/oc2/common/item/NetworkInterfaceCardItem.java index b8600d78..8e11ff3c 100644 --- a/src/main/java/li/cil/oc2/common/item/NetworkInterfaceCardItem.java +++ b/src/main/java/li/cil/oc2/common/item/NetworkInterfaceCardItem.java @@ -95,13 +95,13 @@ public final class NetworkInterfaceCardItem extends ModItem { public InteractionResultHolder use(final Level level, final Player player, final InteractionHand hand) { final ItemStack itemStack = player.getItemInHand(hand); - if (player.getLevel().isClientSide()) { + if (player.level().isClientSide()) { if (itemStack.is(Items.NETWORK_INTERFACE_CARD.get())) { openConfigurationScreen(player, hand); } } - return InteractionResultHolder.sidedSuccess(itemStack, player.getLevel().isClientSide()); + return InteractionResultHolder.sidedSuccess(itemStack, player.level().isClientSide()); } /////////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/item/RobotItem.java b/src/main/java/li/cil/oc2/common/item/RobotItem.java index 846affb4..3fca7433 100644 --- a/src/main/java/li/cil/oc2/common/item/RobotItem.java +++ b/src/main/java/li/cil/oc2/common/item/RobotItem.java @@ -18,6 +18,7 @@ import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.NonNullList; +import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.stats.Stats; @@ -44,11 +45,6 @@ import static li.cil.oc2.common.util.NBTUtils.makeInventoryTag; import static li.cil.oc2.common.util.RegistryUtils.key; public final class RobotItem extends ModItem { - @Override - public void fillItemCategory(final CreativeModeTab tab, final NonNullList items) { - items.add(getRobotWithFlash()); - } - @Override public void appendHoverText(final ItemStack stack, @Nullable final Level level, final List tooltip, final TooltipFlag flag) { super.appendHoverText(stack, level, tooltip, flag); @@ -95,7 +91,8 @@ public final class RobotItem extends ModItem { robot.importFromItemStack(context.getItemInHand()); level.addFreshEntity(robot); - LevelUtils.playSound(level, new BlockPos(position), SoundType.METAL, SoundType::getPlaceSound); + Vec3i posi = new Vec3i((int) position.x, (int) position.y, (int) position.z); + LevelUtils.playSound(level, new BlockPos(posi), SoundType.METAL, SoundType::getPlaceSound); if (context.getPlayer() == null || !context.getPlayer().isCreative()) { context.getItemInHand().shrink(1); diff --git a/src/main/java/li/cil/oc2/common/item/crafting/WrenchRecipe.java b/src/main/java/li/cil/oc2/common/item/crafting/WrenchRecipe.java index 3df3169c..356aa9a6 100644 --- a/src/main/java/li/cil/oc2/common/item/crafting/WrenchRecipe.java +++ b/src/main/java/li/cil/oc2/common/item/crafting/WrenchRecipe.java @@ -5,10 +5,12 @@ package li.cil.oc2.common.item.crafting; import com.google.gson.JsonObject; import li.cil.oc2.common.integration.Wrenches; import net.minecraft.core.NonNullList; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.CraftingBookCategory; import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.ShapelessRecipe; import net.minecraftforge.common.capabilities.Capability; @@ -16,7 +18,7 @@ import org.jetbrains.annotations.Nullable; public final class WrenchRecipe extends ShapelessRecipe { public WrenchRecipe(final ShapelessRecipe recipe) { - super(recipe.getId(), recipe.getGroup(), recipe.getResultItem(), recipe.getIngredients()); + super(recipe.getId(), recipe.getGroup(), CraftingBookCategory.MISC, recipe.getResultItem(RegistryAccess.EMPTY), recipe.getIngredients()); } @Override diff --git a/src/main/java/li/cil/oc2/common/mixin/AtlasAdder.java b/src/main/java/li/cil/oc2/common/mixin/AtlasAdder.java new file mode 100644 index 00000000..2d48177c --- /dev/null +++ b/src/main/java/li/cil/oc2/common/mixin/AtlasAdder.java @@ -0,0 +1,27 @@ +package li.cil.oc2.common.mixin; + +import li.cil.oc2.client.ClientSetup; +import net.minecraft.client.renderer.texture.atlas.SpriteResourceLoader; +import net.minecraft.client.renderer.texture.atlas.SpriteSource; +import net.minecraft.client.renderer.texture.atlas.sources.SingleFile; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +import java.util.List; +import java.util.Optional; + +@Mixin(SpriteResourceLoader.class) +public class AtlasAdder { + @ModifyVariable( + method = "load(Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/renderer/texture/atlas/SpriteResourceLoader;", + at = @At("STORE"), + ordinal = 0 + ) + private static List appendSprites(List sprites, ResourceManager resourceManager, ResourceLocation atlas){ + ClientSetup.collectSprites(atlas, location -> sprites.add(new SingleFile(location, Optional.empty()))); + return sprites; + } +} diff --git a/src/main/java/li/cil/oc2/common/mixin/LevelRendererMixin.java b/src/main/java/li/cil/oc2/common/mixin/LevelRendererMixin.java index d9fb45dc..9a32b200 100644 --- a/src/main/java/li/cil/oc2/common/mixin/LevelRendererMixin.java +++ b/src/main/java/li/cil/oc2/common/mixin/LevelRendererMixin.java @@ -5,7 +5,7 @@ package li.cil.oc2.common.mixin; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; import li.cil.oc2.client.renderer.ProjectorDepthRenderer; import net.minecraft.client.Camera; import net.minecraft.client.Minecraft; diff --git a/src/main/java/li/cil/oc2/common/network/MessageUtils.java b/src/main/java/li/cil/oc2/common/network/MessageUtils.java index 9f9c9b8f..7981fdfe 100644 --- a/src/main/java/li/cil/oc2/common/network/MessageUtils.java +++ b/src/main/java/li/cil/oc2/common/network/MessageUtils.java @@ -32,7 +32,7 @@ public final class MessageUtils { return; } - final ServerLevel level = player.getLevel(); + final ServerLevel level = player.getServer().getLevel(player.level().dimension()); final BlockEntity blockEntity = LevelUtils.getBlockEntityIfChunkExists(level, pos); if (type.isInstance(blockEntity)) { callback.accept(player, (T) blockEntity); @@ -46,7 +46,7 @@ public final class MessageUtils { return; } - final ServerLevel level = player.getLevel(); + final ServerLevel level = player.getServer().getLevel(player.level().dimension()); final Entity entity = level.getEntity(id); if (type.isInstance(entity)) { callback.accept((T) entity); @@ -60,7 +60,7 @@ public final class MessageUtils { return; } - final ServerLevel level = player.getLevel(); + final ServerLevel level = player.getServer().getLevel(player.level().dimension()); final Entity entity = level.getEntity(id); if (type.isInstance(entity) && entity.closerThan(player, 8)) { callback.accept((T) entity); diff --git a/src/main/java/li/cil/oc2/common/tags/BlockTags.java b/src/main/java/li/cil/oc2/common/tags/BlockTags.java index 5569b2f5..1fbddd22 100644 --- a/src/main/java/li/cil/oc2/common/tags/BlockTags.java +++ b/src/main/java/li/cil/oc2/common/tags/BlockTags.java @@ -4,6 +4,7 @@ package li.cil.oc2.common.tags; import li.cil.oc2.api.API; import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.level.block.Block; @@ -21,6 +22,6 @@ public final class BlockTags { /////////////////////////////////////////////////////////////////// private static TagKey tag(final String name) { - return TagKey.create(Registry.BLOCK_REGISTRY, new ResourceLocation(API.MOD_ID, name)); + return TagKey.create(Registries.BLOCK, new ResourceLocation(API.MOD_ID, name)); } } 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 dae50bc5..353a1412 100644 --- a/src/main/java/li/cil/oc2/common/tags/ItemTags.java +++ b/src/main/java/li/cil/oc2/common/tags/ItemTags.java @@ -4,6 +4,7 @@ package li.cil.oc2.common.tags; import li.cil.oc2.api.API; import net.minecraft.core.Registry; +import net.minecraft.core.registries.Registries; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -30,6 +31,6 @@ public final class ItemTags { /////////////////////////////////////////////////////////////////// private static TagKey tag(final String name) { - return TagKey.create(Registry.ITEM_REGISTRY, new ResourceLocation(API.MOD_ID, name)); + return TagKey.create(Registries.ITEM, new ResourceLocation(API.MOD_ID, name)); } } diff --git a/src/main/java/li/cil/oc2/common/util/BlockLocation.java b/src/main/java/li/cil/oc2/common/util/BlockLocation.java index 83f104c5..71f79801 100644 --- a/src/main/java/li/cil/oc2/common/util/BlockLocation.java +++ b/src/main/java/li/cil/oc2/common/util/BlockLocation.java @@ -13,7 +13,7 @@ import java.util.Optional; public record BlockLocation(WeakReference level, BlockPos blockPos) { public static BlockLocation of(final Entity entity) { - return new BlockLocation(new WeakReference<>(entity.level), entity.blockPosition()); + return new BlockLocation(new WeakReference<>(entity.level()), entity.blockPosition()); } public static BlockLocation of(final BlockEntity blockEntity) { diff --git a/src/main/java/li/cil/oc2/common/util/ChainableVertexConsumer.java b/src/main/java/li/cil/oc2/common/util/ChainableVertexConsumer.java index 3383af12..60d96aa5 100644 --- a/src/main/java/li/cil/oc2/common/util/ChainableVertexConsumer.java +++ b/src/main/java/li/cil/oc2/common/util/ChainableVertexConsumer.java @@ -4,9 +4,9 @@ package li.cil.oc2.common.util; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Matrix3f; -import com.mojang.math.Matrix4f; -import com.mojang.math.Vector3f; +import org.joml.Matrix3f; +import org.joml.Matrix4f; +import org.joml.Vector3f; import net.minecraft.client.renderer.SpriteCoordinateExpander; import net.minecraft.client.renderer.block.model.BakedQuad; diff --git a/src/main/java/li/cil/oc2/common/util/SoundEvents.java b/src/main/java/li/cil/oc2/common/util/SoundEvents.java index 7e3c1e02..ac1e32de 100644 --- a/src/main/java/li/cil/oc2/common/util/SoundEvents.java +++ b/src/main/java/li/cil/oc2/common/util/SoundEvents.java @@ -30,6 +30,6 @@ public final class SoundEvents { /////////////////////////////////////////////////////////////////// private static RegistryObject register(final String name) { - return SOUNDS.register(name, () -> new SoundEvent(new ResourceLocation(API.MOD_ID, name))); + return SOUNDS.register(name, () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(API.MOD_ID, name))); } } diff --git a/src/main/java/li/cil/oc2/common/util/TooltipUtils.java b/src/main/java/li/cil/oc2/common/util/TooltipUtils.java index 6d3b70a6..deb98422 100644 --- a/src/main/java/li/cil/oc2/common/util/TooltipUtils.java +++ b/src/main/java/li/cil/oc2/common/util/TooltipUtils.java @@ -16,7 +16,10 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.client.StringSplitter; import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; import net.minecraft.locale.Language; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; @@ -26,6 +29,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.registries.ForgeRegistry; import net.minecraftforge.registries.RegistryManager; +import org.joml.Vector2i; +import org.joml.Vector2ic; import java.text.DecimalFormat; import java.util.ArrayList; @@ -44,15 +49,15 @@ public final class TooltipUtils { /////////////////////////////////////////////////////////////////// - public static void drawTooltip(final PoseStack poseStack, final List tooltip, final int x, final int y) { - drawTooltip(poseStack, tooltip, x, y, 200, ItemStack.EMPTY); + public static void drawTooltip(final GuiGraphics graphics, final List tooltip, final int x, final int y) { + drawTooltip(graphics, tooltip, x, y, 200, ItemStack.EMPTY); } - public static void drawTooltip(final PoseStack poseStack, final List tooltip, final int x, final int y, final int widthHint) { - drawTooltip(poseStack, tooltip, x, y, widthHint, ItemStack.EMPTY); + public static void drawTooltip(final GuiGraphics graphics, final List tooltip, final int x, final int y, final int widthHint) { + drawTooltip(graphics, tooltip, x, y, widthHint, ItemStack.EMPTY); } - public static void drawTooltip(final PoseStack poseStack, final List tooltip, final int x, final int y, final int widthHint, final ItemStack itemStack) { + public static void drawTooltip(final GuiGraphics graphics, final List tooltip, final int x, final int y, final int widthHint, final ItemStack itemStack) { final Minecraft minecraft = Minecraft.getInstance(); final Screen screen = minecraft.screen; if (screen == null) { @@ -61,16 +66,16 @@ public final class TooltipUtils { final int availableWidth = Math.max(x, screen.width - x); final int targetWidth = Math.min(availableWidth, widthHint); - final Font font = ForgeHooksClient.getTooltipFont(null, itemStack, minecraft.font); + final Font font = ForgeHooksClient.getTooltipFont(itemStack, minecraft.font); final boolean needsWrapping = tooltip.stream().anyMatch(line -> font.width(line) > targetWidth); if (!needsWrapping) { - screen.renderComponentTooltip(poseStack, tooltip, x, y, font, itemStack); + graphics.renderComponentTooltip(font, tooltip, x, y, itemStack); } else { final StringSplitter splitter = font.getSplitter(); final List wrappedTooltip = tooltip.stream().flatMap(line -> splitter.splitLines(line, targetWidth, Style.EMPTY).stream()).toList(); - screen.renderComponentTooltip(poseStack, wrappedTooltip, x, y, font, itemStack); + graphics.renderComponentTooltip(font, wrappedTooltip, x, y, itemStack); } } diff --git a/src/main/java/li/cil/oc2/common/util/Vec3Utils.java b/src/main/java/li/cil/oc2/common/util/Vec3Utils.java new file mode 100644 index 00000000..e2b321f8 --- /dev/null +++ b/src/main/java/li/cil/oc2/common/util/Vec3Utils.java @@ -0,0 +1,10 @@ +package li.cil.oc2.common.util; + +import net.minecraft.core.Vec3i; +import net.minecraft.world.phys.Vec3; + +public class Vec3Utils { + public static Vec3i round(Vec3 vec) { + return new Vec3i((int)Math.round(vec.x), (int)Math.round(vec.y), (int)Math.round(vec.z)); + } +} diff --git a/src/main/java/li/cil/oc2/common/vm/Terminal.java b/src/main/java/li/cil/oc2/common/vm/Terminal.java index a3cf6fa9..59c036e3 100644 --- a/src/main/java/li/cil/oc2/common/vm/Terminal.java +++ b/src/main/java/li/cil/oc2/common/vm/Terminal.java @@ -4,7 +4,7 @@ package li.cil.oc2.common.vm; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.*; -import com.mojang.math.Matrix4f; +import org.joml.Matrix4f; import it.unimi.dsi.fastutil.bytes.ByteArrayFIFOQueue; import li.cil.ceres.api.Serialized; import li.cil.oc2.api.API; @@ -808,7 +808,7 @@ public final class Terminal { } BufferBuilder builder = Tesselator.getInstance().getBuilder(); - final Matrix4f matrix = Matrix4f.createTranslateMatrix(0, row * CHAR_HEIGHT, 0); + final Matrix4f matrix = new Matrix4f().translate(0, row * CHAR_HEIGHT, 0); builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR_TEX); @@ -818,10 +818,10 @@ public final class Terminal { BufferBuilder.RenderedBuffer rb = builder.end(); if (lines[row] == null) { - lines[row] = new VertexBuffer(); + lines[row] = new VertexBuffer(VertexBuffer.Usage.STATIC); }else if (lines[row] != null) { lines[row].close(); - lines[row] = new VertexBuffer(); + lines[row] = new VertexBuffer(VertexBuffer.Usage.STATIC); } if (!lines[row].isInvalid()){ diff --git a/src/main/java/li/cil/oc2/data/DataGenerators.java b/src/main/java/li/cil/oc2/data/DataGenerators.java index 4a6d7681..34649951 100644 --- a/src/main/java/li/cil/oc2/data/DataGenerators.java +++ b/src/main/java/li/cil/oc2/data/DataGenerators.java @@ -2,13 +2,20 @@ package li.cil.oc2.data; +import li.cil.oc2.api.API; import net.minecraft.data.DataGenerator; -import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.data.DataProvider; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.data.event.GatherDataEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import java.util.Collections; +import java.util.Set; + @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) public final class DataGenerators { @SubscribeEvent @@ -16,16 +23,23 @@ public final class DataGenerators { final DataGenerator generator = event.getGenerator(); final ExistingFileHelper existingFileHelper = event.getExistingFileHelper(); - if (event.includeServer()) { - generator.addProvider(true, new ModLootTableProvider(generator)); - final BlockTagsProvider blockTagProvider = new ModBlockTagsProvider(generator, existingFileHelper); - generator.addProvider(true, blockTagProvider); - generator.addProvider(true, new ModItemTagsProvider(generator, blockTagProvider, existingFileHelper)); - generator.addProvider(true, new ModRecipesProvider(generator)); - } - if (event.includeClient()) { - generator.addProvider(true, new ModBlockStateProvider(generator, existingFileHelper)); - generator.addProvider(true, new ModItemModelProvider(generator, existingFileHelper)); - } + generator.addProvider( + event.includeServer(), + (DataProvider.Factory) output -> new LootTableProvider( + output, + Set.of(), + Collections.singletonList( + new LootTableProvider.SubProviderEntry( + ModLootTableProvider.ModBlockLootTables::new, + LootContextParamSets.BLOCK + ) + ) + ) + ); + var blockTagsProvider = generator.addProvider(event.includeServer(), (DataProvider.Factory) output -> new ModBlockTagsProvider(output, event.getLookupProvider(), existingFileHelper)); + generator.addProvider(event.includeServer(), (DataProvider.Factory) output -> new ModItemTagsProvider(output, event.getLookupProvider(), blockTagsProvider.contentsGetter(), API.MOD_ID, existingFileHelper)); + generator.addProvider(event.includeServer(), (DataProvider.Factory) ModRecipesProvider::new); + generator.addProvider(event.includeClient(), new ModBlockStateProvider(generator.getPackOutput(), existingFileHelper)); + generator.addProvider(event.includeClient(), new ModItemModelProvider(generator.getPackOutput(), existingFileHelper)); } } diff --git a/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java b/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java index ce0b170f..51dc20da 100644 --- a/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java +++ b/src/main/java/li/cil/oc2/data/ModBlockStateProvider.java @@ -9,8 +9,10 @@ import li.cil.oc2.common.item.Items; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.core.Direction; import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.level.block.Block; import net.minecraftforge.client.model.generators.*; import net.minecraftforge.common.data.ExistingFileHelper; @@ -32,8 +34,8 @@ public final class ModBlockStateProvider extends BlockStateProvider { private static final ResourceLocation PCI_CARD_CAGE_MODEL = new ResourceLocation(API.MOD_ID, "block/pci_card_cage"); - public ModBlockStateProvider(final DataGenerator generator, final ExistingFileHelper existingFileHelper) { - super(generator, API.MOD_ID, existingFileHelper); + public ModBlockStateProvider(final PackOutput output, final ExistingFileHelper existingFileHelper) { + super(output, API.MOD_ID, existingFileHelper); } @Override @@ -45,12 +47,12 @@ public final class ModBlockStateProvider extends BlockStateProvider { horizontalBlock(Blocks.KEYBOARD, Items.KEYBOARD, KEYBOARD_MODEL); horizontalFaceBlock(Blocks.NETWORK_CONNECTOR, Items.NETWORK_CONNECTOR, NETWORK_CONNECTOR_MODEL) .transforms() - .transform(ItemTransforms.TransformType.GUI) + .transform(ItemDisplayContext.GUI) .rotation(30, 315, 0) .translation(0, 2, 0) .scale(0.75f, 0.75f, 0.75f) .end() - .transform(ItemTransforms.TransformType.FIXED) + .transform(ItemDisplayContext.FIXED) .rotation(270, 0, 0) .translation(0, 0, -5) .scale(1, 1, 1) @@ -114,28 +116,28 @@ public final class ModBlockStateProvider extends BlockStateProvider { itemModels().getBuilder(Items.BUS_CABLE.getId().getPath()) .parent(straightModel) .transforms() - .transform(ItemTransforms.TransformType.GUI) + .transform(ItemDisplayContext.GUI) .rotation(30, 225, 0) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.GROUND) + .transform(ItemDisplayContext.GROUND) .translation(0, 3, 0) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.FIXED) + .transform(ItemDisplayContext.FIXED) .rotation(0, 180, 0) .scale(1.0f) .end() - .transform(ItemTransforms.TransformType.THIRD_PERSON_RIGHT_HAND) + .transform(ItemDisplayContext.THIRD_PERSON_RIGHT_HAND) .rotation(75, 45, 0) .translation(0, 2.5f, 0) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND) + .transform(ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) .rotation(0, 45, 0) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND) + .transform(ItemDisplayContext.FIRST_PERSON_LEFT_HAND) .rotation(0, 225, 0) .scale(0.75f) .end(); @@ -143,31 +145,31 @@ public final class ModBlockStateProvider extends BlockStateProvider { itemModels().getBuilder(Items.BUS_INTERFACE.getId().getPath()) .parent(plugModel) .transforms() - .transform(ItemTransforms.TransformType.GUI) + .transform(ItemDisplayContext.GUI) .rotation(30, 315, 0) .translation(2, 1, 0) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.GROUND) + .transform(ItemDisplayContext.GROUND) .translation(0, 3, -5) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.FIXED) + .transform(ItemDisplayContext.FIXED) .rotation(0, 180, 0) .translation(0, 0, 4) .scale(1.0f) .end() - .transform(ItemTransforms.TransformType.THIRD_PERSON_RIGHT_HAND) + .transform(ItemDisplayContext.THIRD_PERSON_RIGHT_HAND) .rotation(75, 180, 0) .translation(0, -1, 0) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.FIRST_PERSON_RIGHT_HAND) + .transform(ItemDisplayContext.FIRST_PERSON_RIGHT_HAND) .rotation(0, 180, 0) .translation(0, 0, 2) .scale(0.75f) .end() - .transform(ItemTransforms.TransformType.FIRST_PERSON_LEFT_HAND) + .transform(ItemDisplayContext.FIRST_PERSON_LEFT_HAND) .rotation(0, 180, 0) .translation(0, 0, 2) .scale(0.75f) diff --git a/src/main/java/li/cil/oc2/data/ModBlockTagsProvider.java b/src/main/java/li/cil/oc2/data/ModBlockTagsProvider.java index 1034db7f..1658c37e 100644 --- a/src/main/java/li/cil/oc2/data/ModBlockTagsProvider.java +++ b/src/main/java/li/cil/oc2/data/ModBlockTagsProvider.java @@ -4,21 +4,25 @@ package li.cil.oc2.data; import li.cil.oc2.api.API; import net.minecraft.data.DataGenerator; -import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraftforge.common.data.BlockTagsProvider; import net.minecraftforge.common.data.ExistingFileHelper; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + import static li.cil.oc2.common.block.Blocks.*; import static li.cil.oc2.common.tags.BlockTags.*; public final class ModBlockTagsProvider extends BlockTagsProvider { - public ModBlockTagsProvider(final DataGenerator generatorIn, @Nullable final ExistingFileHelper existingFileHelper) { - super(generatorIn, API.MOD_ID, existingFileHelper); + public ModBlockTagsProvider(final PackOutput packOutput, CompletableFuture lookupProvider, @Nullable final ExistingFileHelper existingFileHelper) { + super(packOutput, lookupProvider, API.MOD_ID, existingFileHelper); } @Override - protected void addTags() { + protected void addTags(HolderLookup.Provider provider) { tag(DEVICES).add( COMPUTER.get(), REDSTONE_INTERFACE.get(), diff --git a/src/main/java/li/cil/oc2/data/ModItemModelProvider.java b/src/main/java/li/cil/oc2/data/ModItemModelProvider.java index 30ff7831..36c9d205 100644 --- a/src/main/java/li/cil/oc2/data/ModItemModelProvider.java +++ b/src/main/java/li/cil/oc2/data/ModItemModelProvider.java @@ -6,6 +6,7 @@ import li.cil.oc2.api.API; import li.cil.oc2.common.entity.Entities; import li.cil.oc2.common.item.Items; import net.minecraft.data.DataGenerator; +import net.minecraft.data.PackOutput; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Item; import net.minecraftforge.client.model.generators.ItemModelBuilder; @@ -14,8 +15,8 @@ import net.minecraftforge.common.data.ExistingFileHelper; import net.minecraftforge.registries.RegistryObject; public final class ModItemModelProvider extends ItemModelProvider { - public ModItemModelProvider(final DataGenerator generator, final ExistingFileHelper existingFileHelper) { - super(generator, API.MOD_ID, existingFileHelper); + public ModItemModelProvider(final PackOutput output, final ExistingFileHelper existingFileHelper) { + super(output, API.MOD_ID, existingFileHelper); } @Override diff --git a/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java b/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java index 92da6502..0caa45b6 100644 --- a/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java +++ b/src/main/java/li/cil/oc2/data/ModItemTagsProvider.java @@ -6,22 +6,31 @@ import li.cil.oc2.api.API; import li.cil.oc2.common.item.Items; import li.cil.oc2.common.tags.BlockTags; import net.minecraft.data.DataGenerator; -import net.minecraft.data.tags.BlockTagsProvider; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; import net.minecraft.data.tags.ItemTagsProvider; +import net.minecraft.world.level.block.Block; import net.minecraftforge.common.data.ExistingFileHelper; import javax.annotation.Nullable; +import java.util.concurrent.CompletableFuture; + import static li.cil.oc2.common.tags.ItemTags.*; public final class ModItemTagsProvider extends ItemTagsProvider { - public ModItemTagsProvider(final DataGenerator generator, final BlockTagsProvider blockTagProvider, @Nullable final ExistingFileHelper existingFileHelper) { - super(generator, blockTagProvider, API.MOD_ID, existingFileHelper); + public ModItemTagsProvider( + final PackOutput output, + final CompletableFuture lookupProvider, + final CompletableFuture> tagLookup, + final String modId, + @Nullable final ExistingFileHelper existingFileHelper) { + super(output, lookupProvider, tagLookup, modId, existingFileHelper); } @SuppressWarnings("unchecked") @Override - protected void addTags() { + protected void addTags(HolderLookup.Provider provider) { copy(BlockTags.CABLES, CABLES); copy(BlockTags.DEVICES, DEVICES); diff --git a/src/main/java/li/cil/oc2/data/ModLootTableProvider.java b/src/main/java/li/cil/oc2/data/ModLootTableProvider.java index d9e6f7bb..2fe26522 100644 --- a/src/main/java/li/cil/oc2/data/ModLootTableProvider.java +++ b/src/main/java/li/cil/oc2/data/ModLootTableProvider.java @@ -5,26 +5,27 @@ package li.cil.oc2.data; import com.mojang.datafixers.util.Pair; import li.cil.oc2.api.API; import li.cil.oc2.common.block.Blocks; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.loot.BlockLoot; +import net.minecraft.data.PackOutput; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; import net.minecraft.data.loot.LootTableProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.LootTables; -import net.minecraft.world.level.storage.loot.ValidationContext; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.functions.CopyNbtFunction; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSet; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.providers.nbt.ContextNbtProvider; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.ForgeRegistry; +import net.minecraftforge.registries.RegistryObject; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Supplier; @@ -36,25 +37,29 @@ import static java.util.Objects.requireNonNull; import static li.cil.oc2.common.Constants.*; public final class ModLootTableProvider extends LootTableProvider { - public ModLootTableProvider(final DataGenerator generator) { - super(generator); + public ModLootTableProvider(final PackOutput output, final Set additionalTables, final List subProviders) { + super(output, additionalTables, subProviders); } @Override - protected void validate(final Map map, final ValidationContext context) { - map.forEach((location, table) -> LootTables.validate(context, location, table)); + public List getTables() { + return singletonList( + new LootTableProvider.SubProviderEntry( + ModBlockLootTables::new, + LootContextParamSets.BLOCK + ) + ); } - @Override - protected List>>, LootContextParamSet>> getTables() { - return singletonList(Pair.of(ModBlockLootTables::new, LootContextParamSets.BLOCK)); - } + public static final class ModBlockLootTables extends BlockLootSubProvider { + public ModBlockLootTables() { + super(Collections.emptySet(), FeatureFlags.REGISTRY.allFlags()); + } - public static final class ModBlockLootTables extends BlockLoot { @Override - protected void addTables() { + protected void generate() { dropSelf(Blocks.CHARGER.get()); - add(Blocks.COMPUTER.get(), ModBlockLootTables::droppingWithInventory); + add(Blocks.COMPUTER.get(), this::droppingWithInventory); dropSelf(Blocks.DISK_DRIVE.get()); dropSelf(Blocks.KEYBOARD.get()); dropSelf(Blocks.NETWORK_CONNECTOR.get()); @@ -65,13 +70,14 @@ public final class ModLootTableProvider extends LootTableProvider { @Override protected Iterable getKnownBlocks() { - return StreamSupport.stream(super.getKnownBlocks().spliterator(), false) - .filter(block -> requireNonNull(ForgeRegistries.BLOCKS.getKey(block)).getNamespace().equals(API.MOD_ID)) - .filter(block -> block != Blocks.BUS_CABLE.get()) // All bus drops depend on block state. + return Blocks.BLOCKS.getEntries() + .stream() + .filter(blockRegObj -> blockRegObj.get() != Blocks.BUS_CABLE.get()) + .map(RegistryObject::get) .collect(Collectors.toList()); } - private static LootTable.Builder droppingWithInventory(final Block block) { + private LootTable.Builder droppingWithInventory(final Block block) { return LootTable.lootTable() .withPool(applyExplosionCondition(block, LootPool.lootPool() .setRolls(ConstantValue.exactly(1)) diff --git a/src/main/java/li/cil/oc2/data/ModRecipesProvider.java b/src/main/java/li/cil/oc2/data/ModRecipesProvider.java index bc8d6295..0d599e03 100644 --- a/src/main/java/li/cil/oc2/data/ModRecipesProvider.java +++ b/src/main/java/li/cil/oc2/data/ModRecipesProvider.java @@ -5,10 +5,8 @@ package li.cil.oc2.data; import li.cil.oc2.common.item.Items; import net.minecraft.advancements.critereon.InventoryChangeTrigger; import net.minecraft.data.DataGenerator; -import net.minecraft.data.recipes.FinishedRecipe; -import net.minecraft.data.recipes.RecipeProvider; -import net.minecraft.data.recipes.ShapedRecipeBuilder; -import net.minecraft.data.recipes.ShapelessRecipeBuilder; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.*; import net.minecraft.tags.ItemTags; import net.minecraft.world.level.ItemLike; import net.minecraftforge.common.Tags; @@ -16,14 +14,14 @@ import net.minecraftforge.common.Tags; import java.util.function.Consumer; public final class ModRecipesProvider extends RecipeProvider { - public ModRecipesProvider(final DataGenerator generator) { - super(generator); + public ModRecipesProvider(final PackOutput output) { + super(output); } @Override - protected void buildCraftingRecipes(final Consumer consumer) { + protected void buildRecipes(final Consumer consumer) { ShapedRecipeBuilder - .shaped(Items.COMPUTER.get()) + .shaped(RecipeCategory.MISC, Items.COMPUTER.get()) .pattern("ICI") .pattern("XTX") .pattern("IBI") @@ -37,7 +35,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.BUS_CABLE.get(), 16) + .shaped(RecipeCategory.MISC, Items.BUS_CABLE.get(), 16) .pattern("III") .pattern("GTG") .pattern("III") @@ -48,14 +46,14 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapelessRecipeBuilder - .shapeless(Items.BUS_INTERFACE.get()) + .shapeless(RecipeCategory.MISC, Items.BUS_INTERFACE.get()) .requires(Items.TRANSISTOR.get()) .requires(Items.BUS_CABLE.get()) .unlockedBy("has_bus_cable", inventoryChange(Items.BUS_CABLE.get())) .save(consumer); ShapedRecipeBuilder - .shaped(Items.NETWORK_CONNECTOR.get(), 4) + .shaped(RecipeCategory.MISC, Items.NETWORK_CONNECTOR.get(), 4) .pattern("IGI") .pattern("ITI") .define('I', Tags.Items.INGOTS_IRON) @@ -65,7 +63,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.NETWORK_HUB.get()) + .shaped(RecipeCategory.MISC, Items.NETWORK_HUB.get()) .pattern("ICI") .pattern("XTX") .pattern("IBI") @@ -78,7 +76,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.REDSTONE_INTERFACE.get()) + .shaped(RecipeCategory.MISC, Items.REDSTONE_INTERFACE.get()) .pattern("ICI") .pattern("XTX") .pattern("IBI") @@ -91,7 +89,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.DISK_DRIVE.get()) + .shaped(RecipeCategory.MISC, Items.DISK_DRIVE.get()) .pattern("IUI") .pattern("XTD") .pattern("IBI") @@ -105,7 +103,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.KEYBOARD.get()) + .shaped(RecipeCategory.MISC, Items.KEYBOARD.get()) .pattern("UUU") .pattern("XTU") .pattern("IBI") @@ -118,7 +116,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.CHARGER.get()) + .shaped(RecipeCategory.MISC, Items.CHARGER.get()) .pattern("IPI") .pattern("XTX") .pattern("IRI") @@ -131,7 +129,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.PROJECTOR.get()) + .shaped(RecipeCategory.MISC, Items.PROJECTOR.get()) .pattern("GLG") .pattern("XTD") .pattern("GBG") @@ -146,7 +144,7 @@ public final class ModRecipesProvider extends RecipeProvider { ShapedRecipeBuilder - .shaped(Items.WRENCH.get()) + .shaped(RecipeCategory.MISC, Items.WRENCH.get()) .pattern("I I") .pattern(" T ") .pattern(" I ") @@ -164,7 +162,7 @@ public final class ModRecipesProvider extends RecipeProvider { ShapedRecipeBuilder - .shaped(Items.NETWORK_CABLE.get(), 8) + .shaped(RecipeCategory.MISC, Items.NETWORK_CABLE.get(), 8) .pattern("SSS") .pattern("GTG") .pattern("SSS") @@ -175,7 +173,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.ROBOT.get()) + .shaped(RecipeCategory.MISC, Items.ROBOT.get()) .pattern("ICI") .pattern("PTP") .pattern("IBI") @@ -189,7 +187,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.MEMORY_SMALL.get(), 2) + .shaped(RecipeCategory.MISC, Items.MEMORY_SMALL.get(), 2) .pattern("ITI") .pattern(" B ") .define('I', Tags.Items.INGOTS_IRON) @@ -200,7 +198,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.MEMORY_MEDIUM.get(), 2) + .shaped(RecipeCategory.MISC, Items.MEMORY_MEDIUM.get(), 2) .pattern("GTG") .pattern(" B ") .define('G', Tags.Items.INGOTS_GOLD) @@ -211,7 +209,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.MEMORY_LARGE.get(), 2) + .shaped(RecipeCategory.MISC, Items.MEMORY_LARGE.get(), 2) .pattern("DTD") .pattern(" B ") .define('D', Tags.Items.GEMS_DIAMOND) @@ -222,7 +220,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.HARD_DRIVE_SMALL.get()) + .shaped(RecipeCategory.MISC, Items.HARD_DRIVE_SMALL.get()) .pattern("ITI") .pattern("EBE") .define('I', Tags.Items.INGOTS_IRON) @@ -234,7 +232,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.HARD_DRIVE_MEDIUM.get()) + .shaped(RecipeCategory.MISC, Items.HARD_DRIVE_MEDIUM.get()) .pattern("GTG") .pattern("EBE") .define('G', Tags.Items.INGOTS_GOLD) @@ -246,7 +244,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.HARD_DRIVE_LARGE.get()) + .shaped(RecipeCategory.MISC, Items.HARD_DRIVE_LARGE.get()) .pattern("DTD") .pattern("EBE") .define('D', Tags.Items.GEMS_DIAMOND) @@ -265,7 +263,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.FLASH_MEMORY.get()) + .shaped(RecipeCategory.MISC, Items.FLASH_MEMORY.get()) .pattern("ITI") .pattern("RBR") .define('I', Tags.Items.INGOTS_IRON) @@ -284,7 +282,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.REDSTONE_INTERFACE_CARD.get()) + .shaped(RecipeCategory.MISC, Items.REDSTONE_INTERFACE_CARD.get()) .pattern("IRT") .pattern(" B ") .define('R', net.minecraft.world.item.Items.REDSTONE_TORCH) @@ -295,7 +293,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.NETWORK_INTERFACE_CARD.get()) + .shaped(RecipeCategory.MISC, Items.NETWORK_INTERFACE_CARD.get()) .pattern("IGT") .pattern(" B ") .define('G', Tags.Items.GLASS) @@ -306,7 +304,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.NETWORK_TUNNEL_CARD.get()) + .shaped(RecipeCategory.MISC, Items.NETWORK_TUNNEL_CARD.get()) .pattern("IET") .pattern(" B ") .define('E', Tags.Items.ENDER_PEARLS) @@ -317,7 +315,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.FILE_IMPORT_EXPORT_CARD.get()) + .shaped(RecipeCategory.MISC, Items.FILE_IMPORT_EXPORT_CARD.get()) .pattern("IET") .pattern(" B ") .define('E', net.minecraft.world.item.Items.PAPER) @@ -328,7 +326,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.SOUND_CARD.get()) + .shaped(RecipeCategory.MISC, Items.SOUND_CARD.get()) .pattern("IST") .pattern(" B ") .define('S', net.minecraft.world.item.Items.NOTE_BLOCK) @@ -339,7 +337,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.FLOPPY.get()) + .shaped(RecipeCategory.MISC, Items.FLOPPY.get()) .pattern("ITI") .pattern("QBQ") .define('I', Tags.Items.INGOTS_IRON) @@ -351,7 +349,7 @@ public final class ModRecipesProvider extends RecipeProvider { ShapedRecipeBuilder - .shaped(Items.INVENTORY_OPERATIONS_MODULE.get()) + .shaped(RecipeCategory.MISC, Items.INVENTORY_OPERATIONS_MODULE.get()) .pattern("TCG") .pattern(" B ") .define('T', Items.TRANSISTOR.get()) @@ -362,7 +360,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.BLOCK_OPERATIONS_MODULE.get()) + .shaped(RecipeCategory.MISC, Items.BLOCK_OPERATIONS_MODULE.get()) .pattern("TPG") .pattern(" B ") .define('T', Items.TRANSISTOR.get()) @@ -373,7 +371,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapedRecipeBuilder - .shaped(Items.NETWORK_TUNNEL_MODULE.get()) + .shaped(RecipeCategory.MISC, Items.NETWORK_TUNNEL_MODULE.get()) .pattern("TEG") .pattern(" B ") .define('T', Items.TRANSISTOR.get()) @@ -385,7 +383,7 @@ public final class ModRecipesProvider extends RecipeProvider { ShapedRecipeBuilder - .shaped(Items.TRANSISTOR.get(), 12) + .shaped(RecipeCategory.MISC, Items.TRANSISTOR.get(), 12) .pattern("RCR") .pattern("III") .define('I', Tags.Items.INGOTS_IRON) @@ -395,7 +393,7 @@ public final class ModRecipesProvider extends RecipeProvider { .save(consumer); ShapelessRecipeBuilder - .shapeless(Items.CIRCUIT_BOARD.get(), 6) + .shapeless(RecipeCategory.MISC, Items.CIRCUIT_BOARD.get(), 6) .requires(Tags.Items.INGOTS_GOLD) .requires(net.minecraft.world.item.Items.CLAY_BALL) .requires(Items.TRANSISTOR.get()) diff --git a/src/main/java/li/cil/oc2/data/WrenchRecipeBuilder.java b/src/main/java/li/cil/oc2/data/WrenchRecipeBuilder.java index ab6a86f3..91f37757 100644 --- a/src/main/java/li/cil/oc2/data/WrenchRecipeBuilder.java +++ b/src/main/java/li/cil/oc2/data/WrenchRecipeBuilder.java @@ -105,10 +105,10 @@ public final class WrenchRecipeBuilder { public void save(final Consumer consumerIn, final ResourceLocation id) { this.validate(id); this.advancementBuilder.parent(new ResourceLocation("recipes/root")).addCriterion("has_the_recipe", RecipeUnlockedTrigger.unlocked(id)).rewards(AdvancementRewards.Builder.recipe(id)).requirements(RequirementsStrategy.OR); - final CreativeModeTab itemCategory = this.result.getItemCategory(); - if (itemCategory != null) { - consumerIn.accept(new WrenchRecipeBuilder.Result(id, this.result, this.count, this.group == null ? "" : this.group, this.ingredients, this.advancementBuilder, new ResourceLocation(id.getNamespace(), "recipes/" + itemCategory.getRecipeFolderName() + "/" + id.getPath()))); - } + //final CreativeModeTab itemCategory = this.result.; TODO: FIX THIS + //if (itemCategory != null) { + // consumerIn.accept(new WrenchRecipeBuilder.Result(id, this.result, this.count, this.group == null ? "" : this.group, this.ingredients, this.advancementBuilder, new ResourceLocation(id.getNamespace(), "recipes/" + itemCategory.getRecipeFolderName() + "/" + id.getPath()))); + //} } private void validate(final ResourceLocation id) { diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 5c7ef746..6474454f 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -2,3 +2,6 @@ public net.minecraft.client.MouseHandler f_91520_ # mouseGrabbed public-f net.minecraft.world.entity.Entity m_142467_(Lnet/minecraft/world/entity/Entity$RemovalReason;)V # setRemoved public-f net.minecraft.client.renderer.GameRenderer f_109054_ # mainCamera public net.minecraft.network.protocol.game.ServerboundCustomPayloadPacket f_179586_ # MAX_PAYLOAD_SIZE +public net.minecraft.client.gui.components.AbstractWidget f_93620_ # x +public net.minecraft.client.gui.components.AbstractWidget f_93621_ # y +public net.minecraft.client.gui.components.Button (IIIILnet/minecraft/network/chat/Component;Lnet/minecraft/client/gui/components/Button$OnPress;Lnet/minecraft/client/gui/components/Button$CreateNarration;)V # Button diff --git a/src/main/resources/assets/oc2/lang/en_us.json b/src/main/resources/assets/oc2/lang/en_us.json index 8aaf114b..72df2ef7 100644 --- a/src/main/resources/assets/oc2/lang/en_us.json +++ b/src/main/resources/assets/oc2/lang/en_us.json @@ -1,5 +1,5 @@ { - "itemGroup.oc2.common": "OpenComputers II", + "item_group.oc2.common": "OpenComputers II", "block.oc2.computer": "Computer", "block.oc2.computer.desc": "Runs software from Flash Memory and Hard Disks.", diff --git a/src/main/resources/assets/oc2/lang/ru_ru.json b/src/main/resources/assets/oc2/lang/ru_ru.json index b4d47952..59cd6f28 100644 --- a/src/main/resources/assets/oc2/lang/ru_ru.json +++ b/src/main/resources/assets/oc2/lang/ru_ru.json @@ -1,5 +1,5 @@ { - "itemGroup.oc2.common": "OpenComputers II", + "item_group.oc2.common": "OpenComputers II", "block.oc2.computer": "Компьютер", "block.oc2.computer.desc": "Выполняет программы из карт памяти и жестких дисков.", diff --git a/src/main/resources/assets/oc2/lang/zh_cn.json b/src/main/resources/assets/oc2/lang/zh_cn.json index 2e76c837..d78ed4f6 100644 --- a/src/main/resources/assets/oc2/lang/zh_cn.json +++ b/src/main/resources/assets/oc2/lang/zh_cn.json @@ -1,5 +1,5 @@ { - "itemGroup.oc2.common": "开放式电脑 II", + "item_group.oc2.common": "开放式电脑 II", "block.oc2.computer": "电脑", "block.oc2.computer.desc": "使用螺丝刀扳手或者兼容的扳手来添加或移除组件。", diff --git a/src/main/resources/mixins.oc2.json b/src/main/resources/mixins.oc2.json index 3e9d9541..d5bbf95b 100644 --- a/src/main/resources/mixins.oc2.json +++ b/src/main/resources/mixins.oc2.json @@ -10,7 +10,8 @@ "client": [ "FrustumMixin", "LevelRendererMixin", - "MinecraftMixin" + "MinecraftMixin", + "AtlasAdder" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 843f7af4..abf7103c 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,6 +1,6 @@ { "pack": { "description": "Resources", - "pack_format": 5 + "pack_format": 15 } }