From 71fbd84d4b58b62e9f36e19677712948b1bf973c Mon Sep 17 00:00:00 2001 From: Michael Hillcox Date: Thu, 29 Jan 2026 23:11:33 +0000 Subject: [PATCH 1/2] feat: most of the easy work done --- build.gradle | 4 +- gradle.properties | 18 +-- .../desht/modularrouters/ModularRouters.java | 11 +- .../event/RegisterRouterContainerData.java | 8 +- .../block/ModularRouterBlock.java | 4 +- .../block/tile/ModularRouterBlockEntity.java | 19 +-- .../modularrouters/client/KeyBindings.java | 10 +- .../client/gui/ModularRouterScreen.java | 16 ++- .../client/gui/MouseOverHelp.java | 3 +- .../filter/AbstractFilterContainerScreen.java | 7 +- .../gui/filter/AbstractFilterScreen.java | 7 +- .../gui/filter/BulkItemFilterScreen.java | 4 +- .../gui/filter/InspectionFilterScreen.java | 18 +-- .../client/gui/filter/ModFilterScreen.java | 6 +- .../client/gui/filter/RegexFilterScreen.java | 22 +-- .../client/gui/filter/TagFilterScreen.java | 6 +- .../client/gui/module/ModuleScreen.java | 20 +-- .../client/gui/upgrade/SyncUpgradeScreen.java | 4 +- .../client/gui/widgets/EnergyWidget.java | 4 +- .../gui/widgets/button/ItemStackButton.java | 2 +- .../widgets/button/ItemStackCyclerButton.java | 3 +- .../gui/widgets/button/TexturedButton.java | 6 +- .../widgets/button/TexturedCyclerButton.java | 3 +- .../gui/widgets/textfield/FloatTextField.java | 12 +- .../widgets/textfield/IntegerTextField.java | 12 +- .../client/item/DistributorModeProperty.java | 4 +- .../client/item/ModuleTintSource.java | 4 +- .../render/area/ModuleTargetRenderer.java | 2 +- .../client/util/ClientUtil.java | 2 +- .../container/BulkItemFilterMenu.java | 6 +- .../container/handler/BufferHandler.java | 4 +- .../datagen/ModLootTableProvider.java | 7 +- .../datagen/ModModelProvider.java | 4 +- .../datagen/ModRecipeProvider.java | 4 +- .../event/ClientEventHandler.java | 6 +- .../event/TickEventHandler.java | 4 +- .../integration/XPCollection.java | 8 +- .../integration/jade/JadeIntegration.java | 42 +++--- .../jade/RouterComponentProvider.java | 92 ++++++------ .../integration/jade/RouterDataProvider.java | 102 ++++++------- .../jei/JEIModularRoutersPlugin.java | 4 +- .../patchouli/PatchouliHelper.java | 10 +- .../integration/top/ElementModule.java | 134 +++++++++--------- .../integration/top/TOPCompatibility.java | 92 ++++++------ .../integration/top/TOPInfoProvider.java | 92 ++++++------ .../modularrouters/item/IPlayerOwned.java | 5 +- .../desht/modularrouters/item/MRBaseItem.java | 3 +- .../item/module/EnergyDistributorModule.java | 2 +- .../item/module/ModuleItem.java | 2 +- .../item/module/PlayerModule.java | 6 +- .../item/module/SenderModule3.java | 2 +- .../module/adapter/TargetedModuleAdapter.java | 10 +- .../item/smartfilter/BulkItemFilter.java | 2 +- .../item/smartfilter/SmartFilterItem.java | 4 +- .../item/smartfilter/TagFilter.java | 6 +- .../item/upgrade/CamouflageUpgrade.java | 4 +- .../item/upgrade/SecurityUpgrade.java | 17 +-- .../item/upgrade/SyncUpgrade.java | 6 +- .../modularrouters/logic/ModuleTarget.java | 10 +- .../compiled/CompiledDistributorModule.java | 2 +- .../logic/compiled/CompiledFluidModule.java | 4 +- .../logic/compiled/CompiledModule.java | 2 +- .../logic/compiled/CompiledPlayerModule.java | 14 +- .../logic/compiled/CompiledSenderModule1.java | 2 +- .../logic/compiled/CompiledVacuumModule.java | 4 +- .../filter/matchers/InspectionMatcher.java | 2 +- .../messages/ModuleSettingsMessage.java | 4 +- .../recipe/GuideBookRecipe.java | 2 +- .../modularrouters/util/InventoryUtils.java | 4 +- .../desht/modularrouters/util/MiscUtil.java | 10 +- .../util/WildcardedRLMatcher.java | 14 +- 71 files changed, 520 insertions(+), 475 deletions(-) diff --git a/build.gradle b/build.gradle index 1cb8ba95..f55d349c 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ plugins { id 'eclipse' id 'idea' id 'maven-publish' - id 'net.neoforged.moddev' version '2.0.105' - id "me.modmuss50.mod-publish-plugin" version "0.8.4" + id 'net.neoforged.moddev' version '2.0.140' + id "me.modmuss50.mod-publish-plugin" version "1.1.0" } ext.releaseTag = providers.environmentVariable("TAG").orElse("").toString() diff --git a/gradle.properties b/gradle.properties index fc7b1ab6..1ee56144 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,19 +16,19 @@ modrinth_project_id=EuTS81Z3 curse_project_id=250294 # Minecraft/Forge -minecraft_version=1.21.8 -minecraft_version_range=[1.21.8,) -neo_version=21.8.47 -neo_version_range=[21.8.25,) +minecraft_version=1.21.11 +minecraft_version_range=[1.21.11,) +neo_version=21.11.37-beta +neo_version_range=[21.11.0-beta,) loader_version_range=[4,) -pack_format_number=18 -parchment_minecraft_version=1.21.8 -parchment_mappings_version=2025.07.20 +pack_format_number=94.1 +parchment_minecraft_version=1.21.10 +parchment_mappings_version=2025.10.12 # Dependencies top_version=1.21_neo-12.0.3-5 -jade_curse_id=6838468 -jei_version=24.0.0.2 +jade_curse_id=7427066 +jei_version=27.4.0.15 patchouli_version=1.21-87-NEOFORGE ffs_version=21.0.0 diff --git a/src/main/java/me/desht/modularrouters/ModularRouters.java b/src/main/java/me/desht/modularrouters/ModularRouters.java index 97f3da41..a7d637c1 100644 --- a/src/main/java/me/desht/modularrouters/ModularRouters.java +++ b/src/main/java/me/desht/modularrouters/ModularRouters.java @@ -8,6 +8,7 @@ import me.desht.modularrouters.network.NetworkHandler; import me.desht.modularrouters.util.ModNameCache; import me.desht.modularrouters.util.WildcardedRLMatcher; +import net.minecraft.resources.Identifier; import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.ModContainer; @@ -53,15 +54,15 @@ private static void registerDeferred(IEventBus modBus) { } private void registerCaps(RegisterCapabilitiesEvent event) { - event.registerBlockEntity(Capabilities.ItemHandler.BLOCK, + event.registerBlockEntity(Capabilities.Item.BLOCK, ModBlockEntities.MODULAR_ROUTER.get(), (be, side) -> be.getBuffer()); - event.registerBlockEntity(Capabilities.FluidHandler.BLOCK, + event.registerBlockEntity(Capabilities.Fluid.BLOCK, ModBlockEntities.MODULAR_ROUTER.get(), (be, side) -> be.getFluidHandler()); - event.registerBlockEntity(Capabilities.EnergyStorage.BLOCK, + event.registerBlockEntity(Capabilities.Energy.BLOCK, ModBlockEntities.MODULAR_ROUTER.get(), (be, side) -> be.getEnergyStorage()); } @@ -98,4 +99,8 @@ public static void gatherData(GatherDataEvent.Client event) { event.createProvider(ModModelProvider::new); } } + + public static Identifier id(String path) { + return Identifier.fromNamespaceAndPath(MODID, path); + } } diff --git a/src/main/java/me/desht/modularrouters/api/event/RegisterRouterContainerData.java b/src/main/java/me/desht/modularrouters/api/event/RegisterRouterContainerData.java index 348191c7..b0734d89 100644 --- a/src/main/java/me/desht/modularrouters/api/event/RegisterRouterContainerData.java +++ b/src/main/java/me/desht/modularrouters/api/event/RegisterRouterContainerData.java @@ -1,7 +1,7 @@ package me.desht.modularrouters.api.event; import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.inventory.DataSlot; import net.neoforged.bus.api.Event; import org.jetbrains.annotations.ApiStatus; @@ -16,7 +16,7 @@ */ public class RegisterRouterContainerData extends Event { private final ModularRouterBlockEntity router; - private final Map data = new HashMap<>(); + private final Map data = new HashMap<>(); @ApiStatus.Internal public RegisterRouterContainerData(ModularRouterBlockEntity router) { @@ -29,7 +29,7 @@ public RegisterRouterContainerData(ModularRouterBlockEntity router) { * @param id the ID of the slot * @param dataSlot the slot to register */ - public void register(ResourceLocation id, DataSlot dataSlot) { + public void register(Identifier id, DataSlot dataSlot) { data.put(id, dataSlot); } @@ -41,7 +41,7 @@ public ModularRouterBlockEntity getRouter() { } @ApiStatus.Internal - public Map getData() { + public Map getData() { return Collections.unmodifiableMap(data); } } diff --git a/src/main/java/me/desht/modularrouters/block/ModularRouterBlock.java b/src/main/java/me/desht/modularrouters/block/ModularRouterBlock.java index b561660b..68219378 100644 --- a/src/main/java/me/desht/modularrouters/block/ModularRouterBlock.java +++ b/src/main/java/me/desht/modularrouters/block/ModularRouterBlock.java @@ -90,7 +90,7 @@ public boolean hasAnalogOutputSignal(BlockState state) { } @Override - public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos) { + public int getAnalogOutputSignal(BlockState blockState, Level world, BlockPos pos, Direction direction) { return world.getBlockEntity(pos, ModBlockEntities.MODULAR_ROUTER.get()) .map(router -> ItemHandlerHelper.calcRedstoneFromInventory(router.getBuffer())) .orElse(0); @@ -163,7 +163,7 @@ public InteractionResult useWithoutItem(BlockState state, Level world, BlockPos PacketDistributor.sendToPlayer(sp, RouterSettingsMessage.forRouter(router)); PacketDistributor.sendToPlayer(sp, RouterUpgradesSyncMessage.forRouter(router)); sp.openMenu(router, pos); - } else if (!router.isPermitted(player) && world.isClientSide) { + } else if (!router.isPermitted(player) && world.isClientSide()) { player.displayClientMessage(xlate("modularrouters.chatText.security.accessDenied").withStyle(ChatFormatting.RED), false); player.playSound(ModSounds.ERROR.get(), 1.0f, 1.0f); } diff --git a/src/main/java/me/desht/modularrouters/block/tile/ModularRouterBlockEntity.java b/src/main/java/me/desht/modularrouters/block/tile/ModularRouterBlockEntity.java index c331fa71..2281468f 100644 --- a/src/main/java/me/desht/modularrouters/block/tile/ModularRouterBlockEntity.java +++ b/src/main/java/me/desht/modularrouters/block/tile/ModularRouterBlockEntity.java @@ -32,7 +32,8 @@ import me.desht.modularrouters.util.MiscUtil; import me.desht.modularrouters.util.TranslatableEnum; import me.desht.modularrouters.util.fake_player.RouterFakePlayer; -import net.minecraft.Util; +import net.minecraft.server.players.NameAndId; +import net.minecraft.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.GlobalPos; @@ -258,8 +259,8 @@ protected void loadAdditional(ValueInput input) { active = input.getBooleanOr(NBT_ACTIVE, false); activeTimer = input.getIntOr(NBT_ACTIVE_TIMER, 0); ecoMode = input.getBooleanOr(NBT_ECO_MODE, false); - ownerID = input.read(NBT_OWNER_PROFILE, ExtraCodecs.GAME_PROFILE).orElse(DEFAULT_FAKEPLAYER_PROFILE); - + var tmpOwnerID = input.read(NBT_OWNER_PROFILE, NameAndId.CODEC).orElse(new NameAndId(DEFAULT_FAKEPLAYER_PROFILE.id(), DEFAULT_FAKEPLAYER_PROFILE.name())); + ownerID = new GameProfile(tmpOwnerID.id(), tmpOwnerID.name()); // TODO extension data // When restoring, give the counter a random initial value to avoid all saved routers @@ -284,7 +285,7 @@ protected void saveAdditional(ValueOutput output) { if (activeTimer != 0) output.putInt(NBT_ACTIVE_TIMER, activeTimer); if (ecoMode) output.putBoolean(NBT_ECO_MODE, true); if (ownerID != null) { - output.store(NBT_OWNER_PROFILE, ExtraCodecs.GAME_PROFILE, ownerID); + output.store(NBT_OWNER_PROFILE, NameAndId.CODEC, new NameAndId(ownerID.id(), ownerID.name())); } // TODO extension data // if (!getExtensionData().isEmpty()) nbt.put(NBT_EXTRA, getExtensionData()); @@ -526,7 +527,7 @@ private void handleSync(boolean renderUpdate) { // some tile entity field changed that the client needs to know about // if on server, sync TE data to client; if on client, possibly mark the TE for re-render Level level = nonNullLevel(); - if (!level.isClientSide) { + if (!level.isClientSide()) { if (anyPlayerHasThisOpen()) { blockUpdateNeeded = true; } else { @@ -602,7 +603,7 @@ private void compileModules() { private void compileUpgrades() { // if called client-side, always recompile (it's due to an upgrade sync) Level level = nonNullLevel(); - if (level.isClientSide || recompileNeeded.contains(RecompileFlag.UPGRADES)) { + if (level.isClientSide() || recompileNeeded.contains(RecompileFlag.UPGRADES)) { int prevMufflers = getUpgradeCount(ModItems.MUFFLER_UPGRADE.get()); upgradeCount.clear(); permitted.clear(); @@ -623,7 +624,7 @@ private void compileUpgrades() { ConfigHolder.common.router.fluidBaseTransferRate.get() + getUpgradeCount(ModItems.FLUID_UPGRADE.get()) * ConfigHolder.common.router.mBperFluidUpgrade.get()); energyStorage.updateForEnergyUpgrades(getUpgradeCount(ModItems.ENERGY_UPGRADE.get())); - if (!level.isClientSide) { + if (!level.isClientSide()) { int mufflers = getUpgradeCount(ModItems.MUFFLER_UPGRADE.get()); if (prevMufflers != mufflers) { level.setBlock(worldPosition, getBlockState().setValue(ModularRouterBlock.ACTIVE, active && mufflers < 3), Block.UPDATE_CLIENTS); @@ -947,7 +948,7 @@ public AABB getRenderBoundingBox() { } public void addItemBeam(BeamData beamData) { - if (nonNullLevel().isClientSide) { + if (nonNullLevel().isClientSide()) { beams.add(beamData); cachedRenderAABB = null; } else { @@ -985,7 +986,7 @@ public IFluidHandlerItem getFluidHandler() { } public void sendBlockUpdateIfNeeded() { - if (!level.isClientSide && blockUpdateNeeded && !anyPlayerHasThisOpen()) { + if (!level.isClientSide() && blockUpdateNeeded && !anyPlayerHasThisOpen()) { level.sendBlockUpdated(worldPosition, getBlockState(), getBlockState(), Block.UPDATE_ALL); blockUpdateNeeded = false; } diff --git a/src/main/java/me/desht/modularrouters/client/KeyBindings.java b/src/main/java/me/desht/modularrouters/client/KeyBindings.java index c1ee9d55..c3e35ee4 100644 --- a/src/main/java/me/desht/modularrouters/client/KeyBindings.java +++ b/src/main/java/me/desht/modularrouters/client/KeyBindings.java @@ -1,20 +1,26 @@ package me.desht.modularrouters.client; import com.mojang.blaze3d.platform.InputConstants; +import me.desht.modularrouters.ModularRouters; import net.minecraft.client.KeyMapping; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.resources.Identifier; import net.neoforged.neoforge.client.event.RegisterKeyMappingsEvent; import net.neoforged.neoforge.client.settings.KeyConflictContext; import org.lwjgl.glfw.GLFW; public class KeyBindings { + public static KeyMapping.Category CATEGORY = new KeyMapping.Category(ModularRouters.id("key")); + public static KeyMapping keybindConfigure; public static KeyMapping keybindModuleInfo; public static void registerKeyBindings(RegisterKeyMappingsEvent event) { + event.registerCategory(CATEGORY); KeyBindings.keybindConfigure = new KeyMapping("key.modularrouters.configure", KeyConflictContext.GUI, - InputConstants.getKey(GLFW.GLFW_KEY_C, -1), "key.modularrouters.category"); + InputConstants.getKey(new KeyEvent(GLFW.GLFW_KEY_C, -1, 0)), CATEGORY); KeyBindings.keybindModuleInfo = new KeyMapping("key.modularrouters.moduleInfo", KeyConflictContext.GUI, - InputConstants.getKey(GLFW.GLFW_KEY_I, -1), "key.modularrouters.category"); + InputConstants.getKey(new KeyEvent(GLFW.GLFW_KEY_I, -1, 0)), CATEGORY); event.register(KeyBindings.keybindConfigure); event.register(KeyBindings.keybindModuleInfo); diff --git a/src/main/java/me/desht/modularrouters/client/gui/ModularRouterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/ModularRouterScreen.java index fcc28c9d..a6cf71d6 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/ModularRouterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/ModularRouterScreen.java @@ -20,12 +20,14 @@ import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.client.gui.screens.inventory.MenuAccess; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.Rect2i; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.sounds.SoundManager; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; @@ -38,7 +40,7 @@ import static me.desht.modularrouters.util.MiscUtil.RL; public class ModularRouterScreen extends AbstractContainerScreen implements ISendToServer, MenuAccess { - private static final ResourceLocation TEXTURE_LOCATION = RL("textures/gui/router.png"); + private static final Identifier TEXTURE_LOCATION = RL("textures/gui/router.png"); private static final int LABEL_YPOS = 5; private static final int MODULE_LABEL_YPOS = 60; @@ -107,13 +109,13 @@ protected void renderBg(GuiGraphics graphics, float v, int i, int i1) { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - return KeyBindings.keybindConfigure.getKey().getValue() == keyCode ? handleModuleConfig() : super.keyPressed(keyCode, scanCode, modifiers); + public boolean keyPressed(KeyEvent event) { + return KeyBindings.keybindConfigure.getKey().getValue() == event.key() ? handleModuleConfig() : super.keyPressed(event); } @Override - public boolean mouseClicked(double x, double y, int btn) { - return btn == 2 ? handleModuleConfig() : super.mouseClicked(x, y, btn); + public boolean mouseClicked(MouseButtonEvent event, boolean flag) { + return event.button() == 2 ? handleModuleConfig() : super.mouseClicked(event, flag); } @Override @@ -131,7 +133,7 @@ public void containerTick() { boolean hasEnergyUpgrade = menu.getRouter().getEnergyCapacity() > 0; energyWidget.visible = hasEnergyUpgrade; energyDirButton.visible = hasEnergyUpgrade - && getMenu().getSlot(RouterMenu.TE_FIRST_SLOT).getItem().getCapability(Capabilities.EnergyStorage.ITEM) != null; + && getMenu().getSlot(RouterMenu.TE_FIRST_SLOT).getItem().getCapability(Capabilities.Energy.ITEM) != null; energyWarning.setX(hasEnergyUpgrade ? leftPos - 22 : leftPos + 4); energyWarning.tick(); diff --git a/src/main/java/me/desht/modularrouters/client/gui/MouseOverHelp.java b/src/main/java/me/desht/modularrouters/client/gui/MouseOverHelp.java index 651c206e..5a0e8833 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/MouseOverHelp.java +++ b/src/main/java/me/desht/modularrouters/client/gui/MouseOverHelp.java @@ -7,6 +7,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ComponentRenderUtils; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; import net.minecraft.util.FormattedCharSequence; @@ -132,7 +133,7 @@ public Button(int x, int y) { } @Override - public void onClick(double mouseX, double mouseY) { + public void onClick(MouseButtonEvent event, boolean flag) { toggle(); } diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterContainerScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterContainerScreen.java index 2d6e638c..b5f35759 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterContainerScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterContainerScreen.java @@ -8,6 +8,7 @@ import me.desht.modularrouters.util.MFLocator; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.KeyEvent; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Inventory; @@ -46,12 +47,12 @@ boolean closeGUI() { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if ((keyCode == GLFW.GLFW_KEY_ESCAPE || ClientUtil.isInvKey(keyCode))) { + public boolean keyPressed(KeyEvent event) { + if ((event.key() == GLFW.GLFW_KEY_ESCAPE || ClientUtil.isInvKey(event.key()))) { // Intercept ESC/E and immediately reopen the previous GUI, if any if (closeGUI()) return true; } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(event); } @Override diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterScreen.java index c6c71ce3..bd50fcb7 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/AbstractFilterScreen.java @@ -6,6 +6,7 @@ import me.desht.modularrouters.network.messages.OpenGuiMessage; import me.desht.modularrouters.util.MFLocator; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.KeyEvent; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.network.ClientPacketDistributor; @@ -26,12 +27,12 @@ public abstract class AbstractFilterScreen extends Screen implements IResyncable } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (keyCode == GLFW.GLFW_KEY_ESCAPE || (ClientUtil.isInvKey(keyCode)) /*&& (!hasTextFieldManager() || !getOrCreateTextFieldManager().isFocused())*/) { + public boolean keyPressed(KeyEvent event) { + if (event.key() == GLFW.GLFW_KEY_ESCAPE || (ClientUtil.isInvKey(event.key())) /*&& (!hasTextFieldManager() || !getOrCreateTextFieldManager().isFocused())*/) { // Intercept ESC/ and immediately reopen the previous GUI, if any if (closeGUI()) return true; } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(event); } boolean closeGUI() { diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/BulkItemFilterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/BulkItemFilterScreen.java index 0667be84..8ec8ec00 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/BulkItemFilterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/BulkItemFilterScreen.java @@ -19,7 +19,7 @@ import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.network.ClientPacketDistributor; @@ -29,7 +29,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class BulkItemFilterScreen extends AbstractFilterContainerScreen { - private static final ResourceLocation TEXTURE_LOCATION = MiscUtil.RL("textures/gui/bulkitemfilter.png"); + private static final Identifier TEXTURE_LOCATION = MiscUtil.RL("textures/gui/bulkitemfilter.png"); private static final int GUI_WIDTH = 176; private static final int GUI_HEIGHT = 233; diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/InspectionFilterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/InspectionFilterScreen.java index 98709336..34b8853b 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/InspectionFilterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/InspectionFilterScreen.java @@ -11,12 +11,14 @@ import me.desht.modularrouters.network.messages.FilterUpdateMessage; import me.desht.modularrouters.util.MFLocator; import me.desht.modularrouters.util.MiscUtil; -import net.minecraft.Util; +import net.minecraft.client.Minecraft; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.util.Util; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.gui.widget.ExtendedButton; import net.neoforged.neoforge.client.network.ClientPacketDistributor; @@ -29,7 +31,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class InspectionFilterScreen extends AbstractFilterScreen { - private static final ResourceLocation TEXTURE_LOCATION = MiscUtil.RL("textures/gui/inspectionfilter.png"); + private static final Identifier TEXTURE_LOCATION = MiscUtil.RL("textures/gui/inspectionfilter.png"); private static final int GUI_WIDTH = 176; private static final int GUI_HEIGHT = 191; @@ -60,12 +62,12 @@ public void init() { } addRenderableWidget(new ExtendedButton(xPos + 8, yPos + 22, 90, 20, xlate(currentSubject.getTranslationKey()), button -> { - currentSubject = currentSubject.cycle(Screen.hasShiftDown() ? -1 : 1); + currentSubject = currentSubject.cycle(Minecraft.getInstance().hasShiftDown() ? -1 : 1); button.setMessage(xlate(currentSubject.getTranslationKey())); })); addRenderableWidget(new ExtendedButton(xPos + 95, yPos + 22, 20, 20, xlate(currentOp.getTranslationKey()), button -> { - currentOp = currentOp.cycle(Screen.hasShiftDown() ? -1 : 1); + currentOp = currentOp.cycle(Minecraft.getInstance().hasShiftDown() ? -1 : 1); button.setMessage(xlate(currentOp.getTranslationKey())); })); @@ -87,12 +89,12 @@ public void init() { valueTextField = new IntegerTextField(font, xPos + 120, yPos + 28, 20, 14, Range.of(0, 100)) { @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { + public boolean keyPressed(KeyEvent event) { + if (event.key() == GLFW.GLFW_KEY_ENTER || event.key() == GLFW.GLFW_KEY_KP_ENTER) { addEntry(); return true; } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(event); } }; valueTextField.useGuiTextBackground(); diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/ModFilterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/ModFilterScreen.java index 06aaab8f..bf7dc344 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/ModFilterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/ModFilterScreen.java @@ -8,12 +8,12 @@ import me.desht.modularrouters.network.messages.FilterUpdateMessage; import me.desht.modularrouters.util.MiscUtil; import me.desht.modularrouters.util.ModNameCache; -import net.minecraft.Util; +import net.minecraft.util.Util; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.network.ClientPacketDistributor; @@ -23,7 +23,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class ModFilterScreen extends AbstractFilterContainerScreen { - private static final ResourceLocation TEXTURE_LOCATION = MiscUtil.RL("textures/gui/modfilter.png"); + private static final Identifier TEXTURE_LOCATION = MiscUtil.RL("textures/gui/modfilter.png"); private static final int GUI_WIDTH = 176; private static final int GUI_HEIGHT = 252; diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/RegexFilterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/RegexFilterScreen.java index 249b8d1b..3ec09578 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/RegexFilterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/RegexFilterScreen.java @@ -10,12 +10,14 @@ import me.desht.modularrouters.network.messages.FilterUpdateMessage; import me.desht.modularrouters.util.MFLocator; import me.desht.modularrouters.util.MiscUtil; -import net.minecraft.Util; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; +import net.minecraft.util.Util; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.client.network.ClientPacketDistributor; import org.lwjgl.glfw.GLFW; @@ -29,7 +31,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class RegexFilterScreen extends AbstractFilterScreen { - private static final ResourceLocation TEXTURE_LOCATION = MiscUtil.RL("textures/gui/regexfilter.png"); + private static final Identifier TEXTURE_LOCATION = MiscUtil.RL("textures/gui/regexfilter.png"); private static final int GUI_WIDTH = 176; private static final int GUI_HEIGHT = 186; @@ -151,23 +153,27 @@ private static class RegexTextField extends TextFieldWidgetMR { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (keyCode == GLFW.GLFW_KEY_ENTER) { + public boolean keyPressed(KeyEvent event) { + if (event.key() == GLFW.GLFW_KEY_ENTER) { parent.addRegex(); return true; } else { - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(event); } } @Override - public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { + public boolean mouseClicked(MouseButtonEvent event, boolean flag) { + var mouseX = event.x(); + var mouseY = event.y(); + var mouseButton = event.button(); + if (mouseX >= this.getX() && mouseX < this.getX() + this.width && mouseY >= this.getY() && mouseY < this.getY() + this.height) { if (mouseButton == 1) { setValue(""); // right click clears field } } - return super.mouseClicked(mouseX, mouseY, mouseButton); + return super.mouseClicked(event, flag); } } } diff --git a/src/main/java/me/desht/modularrouters/client/gui/filter/TagFilterScreen.java b/src/main/java/me/desht/modularrouters/client/gui/filter/TagFilterScreen.java index 1572209c..83afc066 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/filter/TagFilterScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/filter/TagFilterScreen.java @@ -10,11 +10,11 @@ import me.desht.modularrouters.network.messages.FilterUpdateMessage; import me.desht.modularrouters.util.MiscUtil; import net.minecraft.ChatFormatting; -import net.minecraft.Util; +import net.minecraft.util.Util; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.Item; @@ -27,7 +27,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class TagFilterScreen extends AbstractFilterContainerScreen { - private static final ResourceLocation TEXTURE_LOCATION = MiscUtil.RL("textures/gui/tagfilter.png"); + private static final Identifier TEXTURE_LOCATION = MiscUtil.RL("textures/gui/tagfilter.png"); private static final int GUI_WIDTH = 256; private static final int GUI_HEIGHT = 252; diff --git a/src/main/java/me/desht/modularrouters/client/gui/module/ModuleScreen.java b/src/main/java/me/desht/modularrouters/client/gui/module/ModuleScreen.java index f5477a89..9205f7bd 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/module/ModuleScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/module/ModuleScreen.java @@ -30,12 +30,15 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.client.input.InputWithModifiers; +import net.minecraft.client.input.KeyEvent; +import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.sounds.SoundManager; import net.minecraft.core.BlockPos; import net.minecraft.core.component.DataComponentPatch; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -54,7 +57,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class ModuleScreen extends AbstractContainerScreen implements ContainerListener, IMouseOverHelpProvider, ISendToServer { - protected static final ResourceLocation GUI_TEXTURE = MiscUtil.RL("textures/gui/module.png"); + protected static final Identifier GUI_TEXTURE = MiscUtil.RL("textures/gui/module.png"); // locations of extra textures on the gui module texture sheet protected static final XYPoint SMALL_TEXTFIELD_XY = new XYPoint(0, 198); @@ -279,7 +282,8 @@ protected TintColor getGuiBackgroundTint() { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyEvent event) { + var keyCode = event.key(); if ((keyCode == GLFW.GLFW_KEY_ESCAPE || (ClientUtil.isInvKey(keyCode) && !isFocused())) && routerPos != null) { // Intercept ESC/E and immediately reopen the router GUI - this avoids an // annoying screen flicker between closing the module GUI and reopen the router GUI. @@ -290,13 +294,13 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { // trying to configure an installed smart filter, we're done return handleFilterConfig(); } else { - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(event); } } @Override - public boolean mouseClicked(double x, double y, int button) { - return button == 2 ? handleFilterConfig() : super.mouseClicked(x, y, button); + public boolean mouseClicked(MouseButtonEvent event, boolean flag) { + return event.button() == 2 ? handleFilterConfig() : super.mouseClicked(event, flag); } @Override @@ -440,7 +444,7 @@ public RelativeDirection getDirection() { } @Override - public void onPress() { + public void onPress(InputWithModifiers p_446034_) { for (RelativeDirection dir : RelativeDirection.values()) { DirectionButton db = directionButtons.get(dir); db.setToggled(false); @@ -449,7 +453,7 @@ public void onPress() { } } - super.onPress(); + super.onPress(p_446034_); } } diff --git a/src/main/java/me/desht/modularrouters/client/gui/upgrade/SyncUpgradeScreen.java b/src/main/java/me/desht/modularrouters/client/gui/upgrade/SyncUpgradeScreen.java index 065afb50..504ab250 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/upgrade/SyncUpgradeScreen.java +++ b/src/main/java/me/desht/modularrouters/client/gui/upgrade/SyncUpgradeScreen.java @@ -13,7 +13,7 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.client.sounds.SoundManager; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -23,7 +23,7 @@ import static me.desht.modularrouters.client.util.ClientUtil.xlate; public class SyncUpgradeScreen extends Screen { - private static final ResourceLocation TEXTURE_LOCATION = MiscUtil.RL("textures/gui/sync_upgrade.png"); + private static final Identifier TEXTURE_LOCATION = MiscUtil.RL("textures/gui/sync_upgrade.png"); private static final ItemStack clockStack = new ItemStack(Items.CLOCK); private static final int GUI_WIDTH = 176; private static final int GUI_HEIGHT = 48; diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/EnergyWidget.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/EnergyWidget.java index 4d276a71..15d89d05 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/EnergyWidget.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/EnergyWidget.java @@ -9,7 +9,7 @@ import net.minecraft.client.gui.screens.inventory.tooltip.DefaultTooltipPositioner; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.neoforged.neoforge.energy.IEnergyStorage; import java.util.List; @@ -17,7 +17,7 @@ import static me.desht.modularrouters.util.MiscUtil.RL; public class EnergyWidget extends AbstractWidget { - private static final ResourceLocation TEXTURE_LOCATION = RL("textures/gui/energy_widget.png"); + private static final Identifier TEXTURE_LOCATION = RL("textures/gui/energy_widget.png"); private static final int DEFAULT_SCALE = 64; diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackButton.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackButton.java index 44fc1ddb..a2fcc6af 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackButton.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackButton.java @@ -23,7 +23,7 @@ public ItemStack getRenderStack() { } @Override - public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + public void renderContents(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { if (this.visible) { if (!flat) { graphics.blitSprite(RenderPipelines.GUI_TEXTURED, SPRITES.get(this.active, this.isHoveredOrFocused()), this.getX(), this.getY(), this.getWidth(), this.getHeight()); diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackCyclerButton.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackCyclerButton.java index 875bddd8..dc7598e8 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackCyclerButton.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/ItemStackCyclerButton.java @@ -2,6 +2,7 @@ import me.desht.modularrouters.client.gui.ISendToServer; import me.desht.modularrouters.util.TranslatableEnum; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; import net.minecraft.world.item.ItemStack; @@ -15,7 +16,7 @@ public class ItemStackCyclerButton & TranslatableEnum> extends public ItemStackCyclerButton(int x, int y, int width, int height, boolean flat, ItemStack[] stacks, T initialVal, ISendToServer dataSyncer) { super(x, y, width, height, null, flat, button -> { - ((ItemStackCyclerButton) button).cycle(!Screen.hasShiftDown()); + ((ItemStackCyclerButton) button).cycle(!Minecraft.getInstance().hasShiftDown()); dataSyncer.sendToServer(); }); len = initialVal.getClass().getEnumConstants().length; diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedButton.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedButton.java index d8d13e84..13ca2c9f 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedButton.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedButton.java @@ -6,18 +6,18 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.renderer.RenderPipelines; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.neoforged.neoforge.client.gui.widget.ExtendedButton; public abstract class TexturedButton extends ExtendedButton /*implements ITooltipButton*/ { - static final ResourceLocation TEXTURE = MiscUtil.RL("textures/gui/widgets.png"); + static final Identifier TEXTURE = MiscUtil.RL("textures/gui/widgets.png"); public TexturedButton(int x, int y, int width, int height, OnPress pressable) { super(x, y, width, height, Component.empty(), pressable); } @Override - public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float partialTicks) { + public void renderContents(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { if (this.visible) { this.isHovered = mouseX >= this.getX() && mouseY >= this.getY() && mouseX < this.getX() + this.width && mouseY < this.getY() + this.height; int i = getYImage(isHovered); diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedCyclerButton.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedCyclerButton.java index 3ce05773..d06b99f2 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedCyclerButton.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/button/TexturedCyclerButton.java @@ -2,6 +2,7 @@ import me.desht.modularrouters.client.gui.ISendToServer; import me.desht.modularrouters.util.TranslatableEnum; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.screens.Screen; @@ -13,7 +14,7 @@ public abstract class TexturedCyclerButton & TranslatableEnum> public TexturedCyclerButton(int x, int y, int width, int height, T initialVal, ISendToServer dataSyncer) { super(x, y, width, height, button -> { - ((TexturedCyclerButton) button).cycle(!Screen.hasShiftDown()); + ((TexturedCyclerButton) button).cycle(!Minecraft.getInstance().hasShiftDown()); dataSyncer.sendToServer(); }); setState(initialVal); diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/FloatTextField.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/FloatTextField.java index 8f50b2ea..6b0a0d2c 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/FloatTextField.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/FloatTextField.java @@ -1,7 +1,9 @@ package me.desht.modularrouters.client.gui.widgets.textfield; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.KeyEvent; import org.lwjgl.glfw.GLFW; public class FloatTextField extends TextFieldWidgetMR { @@ -38,13 +40,13 @@ public void setIncr(float incr, float fine, float coarse) { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - return switch (keyCode) { + public boolean keyPressed(KeyEvent event) { + return switch (event.key()) { case GLFW.GLFW_KEY_UP -> adjustField(incr); case GLFW.GLFW_KEY_DOWN -> adjustField(-incr); case GLFW.GLFW_KEY_PAGE_UP -> adjustField(max); case GLFW.GLFW_KEY_PAGE_DOWN -> adjustField(-max); - default -> super.keyPressed(keyCode, scanCode, modifiers); + default -> super.keyPressed(event); }; } @@ -65,9 +67,9 @@ public void setPrecision(int precision) { } private boolean adjustField(float adj) { - if (Screen.hasControlDown()) { + if (Minecraft.getInstance().hasControlDown()) { adj *= fine; - } else if (Screen.hasShiftDown()) { + } else if (Minecraft.getInstance().hasShiftDown()) { adj *= coarse; } float val; diff --git a/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/IntegerTextField.java b/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/IntegerTextField.java index 2bd01f37..f1d55cc4 100644 --- a/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/IntegerTextField.java +++ b/src/main/java/me/desht/modularrouters/client/gui/widgets/textfield/IntegerTextField.java @@ -1,7 +1,9 @@ package me.desht.modularrouters.client.gui.widgets.textfield; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.input.KeyEvent; import net.minecraft.util.Mth; import org.apache.commons.lang3.Range; import org.lwjgl.glfw.GLFW; @@ -36,13 +38,13 @@ private boolean validate(String input) { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - return switch (keyCode) { + public boolean keyPressed(KeyEvent event) { + return switch (event.key()) { case GLFW.GLFW_KEY_UP -> adjustField(getAdjustment()); case GLFW.GLFW_KEY_DOWN -> adjustField(-getAdjustment()); case GLFW.GLFW_KEY_PAGE_UP -> adjustField(range.getMaximum()); case GLFW.GLFW_KEY_PAGE_DOWN -> adjustField(-range.getMaximum()); - default -> super.keyPressed(keyCode, scanCode, modifiers); + default -> super.keyPressed(event); }; } @@ -87,9 +89,9 @@ public void setIncr(int incr, int coarseAdjustMult, int fineAdjustDiv) { } private int getAdjustment() { - if (Screen.hasShiftDown()) { + if (Minecraft.getInstance().hasShiftDown()) { return coarseIncr; - } else if (Screen.hasControlDown()) { + } else if (Minecraft.getInstance().hasControlDown()) { return fineIncr; } else { return incr; diff --git a/src/main/java/me/desht/modularrouters/client/item/DistributorModeProperty.java b/src/main/java/me/desht/modularrouters/client/item/DistributorModeProperty.java index d06d98e9..d61afea3 100644 --- a/src/main/java/me/desht/modularrouters/client/item/DistributorModeProperty.java +++ b/src/main/java/me/desht/modularrouters/client/item/DistributorModeProperty.java @@ -8,7 +8,7 @@ import me.desht.modularrouters.util.MiscUtil; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.renderer.item.properties.select.SelectItemModelProperty; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; @@ -17,7 +17,7 @@ public enum DistributorModeProperty implements SelectItemModelProperty { INSTANCE; - public static final ResourceLocation ID = MiscUtil.RL("distributor_mode"); + public static final Identifier ID = MiscUtil.RL("distributor_mode"); public static final SelectItemModelProperty.Type TYPE = SelectItemModelProperty.Type.create(MapCodec.unit(INSTANCE), TransferDirection.CODEC); diff --git a/src/main/java/me/desht/modularrouters/client/item/ModuleTintSource.java b/src/main/java/me/desht/modularrouters/client/item/ModuleTintSource.java index b2e67916..c967ad18 100644 --- a/src/main/java/me/desht/modularrouters/client/item/ModuleTintSource.java +++ b/src/main/java/me/desht/modularrouters/client/item/ModuleTintSource.java @@ -4,7 +4,7 @@ import me.desht.modularrouters.core.ModItems; import net.minecraft.client.color.item.ItemTintSource; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.Nullable; @@ -14,7 +14,7 @@ public enum ModuleTintSource implements ItemTintSource { INSTANCE; - public static final ResourceLocation ID = RL("module_tint"); + public static final Identifier ID = RL("module_tint"); public static final MapCodec CODEC = MapCodec.unit(INSTANCE); @Override diff --git a/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java b/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java index a11e8cf5..f7f5f2e5 100644 --- a/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java +++ b/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java @@ -52,7 +52,7 @@ public static void renderModuleTargets(RenderLevelStageEvent.AfterParticles even matrixStack.pushPose(); - Vec3 projectedView = event.getCamera().getPosition(); + Vec3 projectedView = event.getLevelRenderState().cameraRenderState.pos; matrixStack.translate(-projectedView.x, -projectedView.y, -projectedView.z); render(buffer, matrixStack, compiledPos); diff --git a/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java b/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java index 13b1b26d..dab09ecd 100644 --- a/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java +++ b/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java @@ -69,7 +69,7 @@ public static FormattedCharSequence ellipsize(Font font, String str, int maxWidt public static boolean isKeyDown(KeyMapping key) { return !key.isUnbound() - && InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), key.getKey().getValue()) + && InputConstants.isKeyDown(Minecraft.getInstance().getWindow(), key.getKey().getValue()) && key.getKeyConflictContext().isActive(); } diff --git a/src/main/java/me/desht/modularrouters/container/BulkItemFilterMenu.java b/src/main/java/me/desht/modularrouters/container/BulkItemFilterMenu.java index a11244bb..73add9e4 100644 --- a/src/main/java/me/desht/modularrouters/container/BulkItemFilterMenu.java +++ b/src/main/java/me/desht/modularrouters/container/BulkItemFilterMenu.java @@ -38,7 +38,7 @@ public BulkItemFilterMenu(int windowId, Inventory invPlayer, FriendlyByteBuf ext public BulkItemFilterMenu(int windowId, Inventory invPlayer, MFLocator loc) { super(ModMenuTypes.BULK_FILTER_MENU.get(), windowId, invPlayer, loc); - this.handler = new BulkFilterHandler(filterStack, router, loc.getModuleStack(invPlayer.player), loc.filterSlot(), !invPlayer.player.level().isClientSide); + this.handler = new BulkFilterHandler(filterStack, router, loc.getModuleStack(invPlayer.player), loc.filterSlot(), !invPlayer.player.level().isClientSide()); this.currentSlot = invPlayer.getSelectedSlot() + HOTBAR_START; // slots for the (ghost) filter items @@ -66,7 +66,7 @@ public void clearSlots() { } }); - if (getRouter() != null && !getRouter().nonNullLevel().isClientSide) { + if (getRouter() != null && !getRouter().nonNullLevel().isClientSide()) { getRouter().recompileNeeded(RecompileFlag.MODULES); } } @@ -95,7 +95,7 @@ public void mergeInventory(IItemHandler srcInv, ModuleFlags flags, boolean clear } }); - if (getRouter() != null && !getRouter().nonNullLevel().isClientSide) { + if (getRouter() != null && !getRouter().nonNullLevel().isClientSide()) { getRouter().recompileNeeded(RecompileFlag.MODULES); } } diff --git a/src/main/java/me/desht/modularrouters/container/handler/BufferHandler.java b/src/main/java/me/desht/modularrouters/container/handler/BufferHandler.java index 6ff4ee0a..595bed81 100644 --- a/src/main/java/me/desht/modularrouters/container/handler/BufferHandler.java +++ b/src/main/java/me/desht/modularrouters/container/handler/BufferHandler.java @@ -59,11 +59,11 @@ private T revalidate(ItemStack stack, ItemCapability cap, T old, At } public IFluidHandlerItem getFluidHandler() { - return getCapability(Capabilities.FluidHandler.ITEM); + return getCapability(Capabilities.Fluid.ITEM); } public IEnergyStorage getEnergyStorage() { - return getCapability(Capabilities.EnergyStorage.ITEM); + return getCapability(Capabilities.Energy.ITEM); } @Nullable diff --git a/src/main/java/me/desht/modularrouters/datagen/ModLootTableProvider.java b/src/main/java/me/desht/modularrouters/datagen/ModLootTableProvider.java index 96a8efcb..fd15a840 100644 --- a/src/main/java/me/desht/modularrouters/datagen/ModLootTableProvider.java +++ b/src/main/java/me/desht/modularrouters/datagen/ModLootTableProvider.java @@ -10,6 +10,8 @@ import net.minecraft.util.ProblemReporter; import net.minecraft.world.flag.FeatureFlags; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootContext; +import net.minecraft.world.level.storage.loot.LootContextArg; import net.minecraft.world.level.storage.loot.LootPool; import net.minecraft.world.level.storage.loot.LootTable; import net.minecraft.world.level.storage.loot.ValidationContext; @@ -17,6 +19,7 @@ import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction; import net.minecraft.world.level.storage.loot.functions.CopyNameFunction; import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition; import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; @@ -54,8 +57,8 @@ protected void generate() { .when(ExplosionCondition.survivesExplosion()) .setRolls(ConstantValue.exactly(1)) .add(LootItem.lootTableItem(router) - .apply(CopyNameFunction.copyName(CopyNameFunction.NameSource.BLOCK_ENTITY)) - .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .apply(CopyNameFunction.copyName(LootContext.BlockEntityTarget.BLOCK_ENTITY)) + .apply(CopyComponentsFunction.copyComponentsFromBlockEntity(LootContextParams.BLOCK_ENTITY) .include(ModDataComponents.REDSTONE_BEHAVIOUR.get()) .include(ModDataComponents.SAVED_MODULES.get()) .include(ModDataComponents.SAVED_UPGRADES.get()) diff --git a/src/main/java/me/desht/modularrouters/datagen/ModModelProvider.java b/src/main/java/me/desht/modularrouters/datagen/ModModelProvider.java index ea3ed5b4..513132cd 100644 --- a/src/main/java/me/desht/modularrouters/datagen/ModModelProvider.java +++ b/src/main/java/me/desht/modularrouters/datagen/ModModelProvider.java @@ -26,7 +26,7 @@ import net.minecraft.client.renderer.item.ItemModel; import net.minecraft.core.Direction; import net.minecraft.data.PackOutput; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -47,7 +47,7 @@ protected void registerModels(BlockModelGenerators blockModels, ItemModelGenerat ModularRouterBlock routerBlock = ModBlocks.MODULAR_ROUTER.get(); var routerTemplate = ExtendedModelTemplateBuilder.builder() - .parent(ResourceLocation.withDefaultNamespace("block/block")) + .parent(Identifier.withDefaultNamespace("block/block")) .element(elementBuilder -> { elementBuilder.face(Direction.DOWN, faceBuilder -> faceBuilder.cullface(Direction.DOWN).texture(TextureSlot.BOTTOM)); elementBuilder.face(Direction.UP, faceBuilder -> faceBuilder.cullface(Direction.UP).texture(TextureSlot.TOP)); diff --git a/src/main/java/me/desht/modularrouters/datagen/ModRecipeProvider.java b/src/main/java/me/desht/modularrouters/datagen/ModRecipeProvider.java index 495d9b64..734854a4 100644 --- a/src/main/java/me/desht/modularrouters/datagen/ModRecipeProvider.java +++ b/src/main/java/me/desht/modularrouters/datagen/ModRecipeProvider.java @@ -11,7 +11,7 @@ import net.minecraft.data.PackOutput; import net.minecraft.data.recipes.*; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.ItemTags; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -397,7 +397,7 @@ private ShapelessRecipeBuilder shapeless(T result, int coun } private String safeName(T required) { - ResourceLocation key = BuiltInRegistries.ITEM.getKey(required.asItem()); + Identifier key = BuiltInRegistries.ITEM.getKey(required.asItem()); return key.getPath().replace('/', '_'); } diff --git a/src/main/java/me/desht/modularrouters/event/ClientEventHandler.java b/src/main/java/me/desht/modularrouters/event/ClientEventHandler.java index 008cf010..a58046d7 100644 --- a/src/main/java/me/desht/modularrouters/event/ClientEventHandler.java +++ b/src/main/java/me/desht/modularrouters/event/ClientEventHandler.java @@ -21,7 +21,7 @@ public static void clientTick(ClientTickEvent.Post event) { @SubscribeEvent public static void onPlayerLeftClick(PlayerInteractEvent.LeftClickBlock event) { - if (event.getLevel().isClientSide && event.getItemStack().getItem() instanceof ModuleItem) { + if (event.getLevel().isClientSide() && event.getItemStack().getItem() instanceof ModuleItem) { ClientPacketDistributor.sendToServer(new ValidateModuleMessage(event.getHand())); event.setCanceled(true); } @@ -29,8 +29,8 @@ public static void onPlayerLeftClick(PlayerInteractEvent.LeftClickBlock event) { @SubscribeEvent public static void onPlayerLeftClick(PlayerInteractEvent.LeftClickEmpty event) { - if (event.getLevel().isClientSide && event.getItemStack().getItem() instanceof ModuleItem) { + if (event.getLevel().isClientSide() && event.getItemStack().getItem() instanceof ModuleItem) { ClientPacketDistributor.sendToServer(new ValidateModuleMessage(event.getHand())); } } -} \ No newline at end of file +} diff --git a/src/main/java/me/desht/modularrouters/event/TickEventHandler.java b/src/main/java/me/desht/modularrouters/event/TickEventHandler.java index c9458451..b81a38a1 100644 --- a/src/main/java/me/desht/modularrouters/event/TickEventHandler.java +++ b/src/main/java/me/desht/modularrouters/event/TickEventHandler.java @@ -13,8 +13,8 @@ public class TickEventHandler { @SubscribeEvent public static void onWorldTick(LevelTickEvent.Post event) { - if (event.getLevel().dimension() == Level.OVERWORLD && !event.getLevel().isClientSide) { + if (event.getLevel().dimension() == Level.OVERWORLD && !event.getLevel().isClientSide()) { TickCounter++; } } -} \ No newline at end of file +} diff --git a/src/main/java/me/desht/modularrouters/integration/XPCollection.java b/src/main/java/me/desht/modularrouters/integration/XPCollection.java index 819b2725..32954374 100644 --- a/src/main/java/me/desht/modularrouters/integration/XPCollection.java +++ b/src/main/java/me/desht/modularrouters/integration/XPCollection.java @@ -3,7 +3,7 @@ import me.desht.modularrouters.util.TranslatableEnum; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.util.StringRepresentable; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.material.Fluid; @@ -67,19 +67,19 @@ public enum XPCollectionType implements TranslatableEnum, StringRepresentable { private final boolean solid; private final int xpRatio; // XP points per item, or (for fluids) mB per XP - private final ResourceLocation registryName; + private final Identifier registryName; XPCollectionType(boolean solid, int xpRatio, String registryName) { this.solid = solid; this.xpRatio = xpRatio; - this.registryName = ResourceLocation.parse(registryName); + this.registryName = Identifier.parse(registryName); } public int getXpRatio() { return xpRatio; } - public ResourceLocation getRegistryName() { + public Identifier getRegistryName() { return registryName; } diff --git a/src/main/java/me/desht/modularrouters/integration/jade/JadeIntegration.java b/src/main/java/me/desht/modularrouters/integration/jade/JadeIntegration.java index 7669c633..333feffb 100644 --- a/src/main/java/me/desht/modularrouters/integration/jade/JadeIntegration.java +++ b/src/main/java/me/desht/modularrouters/integration/jade/JadeIntegration.java @@ -1,21 +1,21 @@ -package me.desht.modularrouters.integration.jade; - -import me.desht.modularrouters.block.ModularRouterBlock; -import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; -import snownee.jade.api.IWailaClientRegistration; -import snownee.jade.api.IWailaCommonRegistration; -import snownee.jade.api.IWailaPlugin; -import snownee.jade.api.WailaPlugin; - -@WailaPlugin -public class JadeIntegration implements IWailaPlugin { - @Override - public void register(IWailaCommonRegistration registration) { - registration.registerBlockDataProvider(new RouterDataProvider(), ModularRouterBlockEntity.class); - } - - @Override - public void registerClient(IWailaClientRegistration registration) { - registration.registerBlockComponent(new RouterComponentProvider(), ModularRouterBlock.class); - } -} +//package me.desht.modularrouters.integration.jade; +// +//import me.desht.modularrouters.block.ModularRouterBlock; +//import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; +//import snownee.jade.api.IWailaClientRegistration; +//import snownee.jade.api.IWailaCommonRegistration; +//import snownee.jade.api.IWailaPlugin; +//import snownee.jade.api.WailaPlugin; +// +//@WailaPlugin +//public class JadeIntegration implements IWailaPlugin { +// @Override +// public void register(IWailaCommonRegistration registration) { +// registration.registerBlockDataProvider(new RouterDataProvider(), ModularRouterBlockEntity.class); +// } +// +// @Override +// public void registerClient(IWailaClientRegistration registration) { +// registration.registerBlockComponent(new RouterComponentProvider(), ModularRouterBlock.class); +// } +//} diff --git a/src/main/java/me/desht/modularrouters/integration/jade/RouterComponentProvider.java b/src/main/java/me/desht/modularrouters/integration/jade/RouterComponentProvider.java index 024e0f98..a6a72541 100644 --- a/src/main/java/me/desht/modularrouters/integration/jade/RouterComponentProvider.java +++ b/src/main/java/me/desht/modularrouters/integration/jade/RouterComponentProvider.java @@ -1,46 +1,46 @@ -package me.desht.modularrouters.integration.jade; - -import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; -import me.desht.modularrouters.logic.settings.RedstoneBehaviour; -import net.minecraft.ChatFormatting; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import snownee.jade.api.BlockAccessor; -import snownee.jade.api.IBlockComponentProvider; -import snownee.jade.api.ITooltip; -import snownee.jade.api.config.IPluginConfig; - -import static me.desht.modularrouters.client.util.ClientUtil.xlate; -import static me.desht.modularrouters.util.MiscUtil.RL; - -public class RouterComponentProvider implements IBlockComponentProvider { - @Override - public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { - CompoundTag data = blockAccessor.getServerData(); - if (blockAccessor.getBlockEntity() instanceof ModularRouterBlockEntity) { - if (data.getBooleanOr("Denied", false)) { - iTooltip.add(xlate("modularrouters.chatText.security.accessDenied").withStyle(ChatFormatting.RED)); - } else { - data.getInt("ModuleCount").ifPresent(c -> iTooltip.add(xlate("modularrouters.itemText.misc.moduleCount", c))); - data.getCompound("Upgrades").ifPresent(upgrades -> { - iTooltip.add(xlate("modularrouters.itemText.misc.upgrades").append(":")); - for (String k : upgrades.keySet()) { - upgrades.getInt(k).ifPresent(c -> iTooltip.add(xlate("modularrouters.itemText.misc.upgradeCount", c, xlate(k)))); - } - }); - RedstoneBehaviour rrb = RedstoneBehaviour.values()[data.getIntOr("RedstoneMode", 0)]; - iTooltip.add(xlate("modularrouters.guiText.tooltip.redstone.label") - .append(": " + ChatFormatting.AQUA) - .append(xlate(rrb.getTranslationKey())) - ); - data.getBoolean("EcoMode").ifPresent(b -> iTooltip.add(xlate("modularrouters.itemText.misc.ecoMode").withStyle(ChatFormatting.GREEN))); - } - } - } - - @Override - public ResourceLocation getUid() { - return RL("router"); - } - -} +//package me.desht.modularrouters.integration.jade; +// +//import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; +//import me.desht.modularrouters.logic.settings.RedstoneBehaviour; +//import net.minecraft.ChatFormatting; +//import net.minecraft.nbt.CompoundTag; +//import net.minecraft.resources.Identifier; +//import snownee.jade.api.BlockAccessor; +//import snownee.jade.api.IBlockComponentProvider; +//import snownee.jade.api.ITooltip; +//import snownee.jade.api.config.IPluginConfig; +// +//import static me.desht.modularrouters.client.util.ClientUtil.xlate; +//import static me.desht.modularrouters.util.MiscUtil.RL; +// +//public class RouterComponentProvider implements IBlockComponentProvider { +// @Override +// public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) { +// CompoundTag data = blockAccessor.getServerData(); +// if (blockAccessor.getBlockEntity() instanceof ModularRouterBlockEntity) { +// if (data.getBooleanOr("Denied", false)) { +// iTooltip.add(xlate("modularrouters.chatText.security.accessDenied").withStyle(ChatFormatting.RED)); +// } else { +// data.getInt("ModuleCount").ifPresent(c -> iTooltip.add(xlate("modularrouters.itemText.misc.moduleCount", c))); +// data.getCompound("Upgrades").ifPresent(upgrades -> { +// iTooltip.add(xlate("modularrouters.itemText.misc.upgrades").append(":")); +// for (String k : upgrades.keySet()) { +// upgrades.getInt(k).ifPresent(c -> iTooltip.add(xlate("modularrouters.itemText.misc.upgradeCount", c, xlate(k)))); +// } +// }); +// RedstoneBehaviour rrb = RedstoneBehaviour.values()[data.getIntOr("RedstoneMode", 0)]; +// iTooltip.add(xlate("modularrouters.guiText.tooltip.redstone.label") +// .append(": " + ChatFormatting.AQUA) +// .append(xlate(rrb.getTranslationKey())) +// ); +// data.getBoolean("EcoMode").ifPresent(b -> iTooltip.add(xlate("modularrouters.itemText.misc.ecoMode").withStyle(ChatFormatting.GREEN))); +// } +// } +// } +// +// @Override +// public Identifier getUid() { +// return RL("router"); +// } +// +//} diff --git a/src/main/java/me/desht/modularrouters/integration/jade/RouterDataProvider.java b/src/main/java/me/desht/modularrouters/integration/jade/RouterDataProvider.java index 69467881..af1102ec 100644 --- a/src/main/java/me/desht/modularrouters/integration/jade/RouterDataProvider.java +++ b/src/main/java/me/desht/modularrouters/integration/jade/RouterDataProvider.java @@ -1,51 +1,51 @@ -package me.desht.modularrouters.integration.jade; - -import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; -import me.desht.modularrouters.item.upgrade.UpgradeItem; -import net.minecraft.Util; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import net.neoforged.neoforge.items.IItemHandler; -import snownee.jade.api.BlockAccessor; -import snownee.jade.api.IServerDataProvider; - -import java.util.HashMap; -import java.util.Map; - -import static me.desht.modularrouters.util.MiscUtil.RL; - -public class RouterDataProvider implements IServerDataProvider { - @Override - public void appendServerData(CompoundTag compoundTag, BlockAccessor accessor) { - if (accessor.getBlockEntity() instanceof ModularRouterBlockEntity router) { - if (router.isPermitted(accessor.getPlayer())) { - compoundTag.putInt("ModuleCount", router.getModuleCount()); - compoundTag.putInt("RedstoneMode", router.getRedstoneBehaviour().ordinal()); - if (router.getEcoMode()) compoundTag.putBoolean("EcoMode", true); - CompoundTag upgrades = getUpgrades(router); - if (!upgrades.isEmpty()) compoundTag.put("Upgrades", upgrades); - } else { - compoundTag.putBoolean("Denied", true); - } - } - } - - private CompoundTag getUpgrades(ModularRouterBlockEntity router) { - IItemHandler handler = router.getUpgrades(); - Map counts = new HashMap<>(); - for (int i = 0; i < handler.getSlots(); i++) { - ItemStack stack = handler.getStackInSlot(i); - if (stack.getItem() instanceof UpgradeItem) { - counts.put(stack.getItem(), counts.getOrDefault(stack.getItem(), 0) + stack.getCount()); - } - } - return Util.make(new CompoundTag(), tag -> counts.forEach((k, v) -> tag.putInt(k.getDescriptionId(), v))); - } - - @Override - public ResourceLocation getUid() { - return RL("router"); - } -} +//package me.desht.modularrouters.integration.jade; +// +//import me.desht.modularrouters.block.tile.ModularRouterBlockEntity; +//import me.desht.modularrouters.item.upgrade.UpgradeItem; +//import net.minecraft.util.Util; +//import net.minecraft.nbt.CompoundTag; +//import net.minecraft.resources.Identifier; +//import net.minecraft.world.item.Item; +//import net.minecraft.world.item.ItemStack; +//import net.neoforged.neoforge.items.IItemHandler; +//import snownee.jade.api.BlockAccessor; +//import snownee.jade.api.IServerDataProvider; +// +//import java.util.HashMap; +//import java.util.Map; +// +//import static me.desht.modularrouters.util.MiscUtil.RL; +// +//public class RouterDataProvider implements IServerDataProvider { +// @Override +// public void appendServerData(CompoundTag compoundTag, BlockAccessor accessor) { +// if (accessor.getBlockEntity() instanceof ModularRouterBlockEntity router) { +// if (router.isPermitted(accessor.getPlayer())) { +// compoundTag.putInt("ModuleCount", router.getModuleCount()); +// compoundTag.putInt("RedstoneMode", router.getRedstoneBehaviour().ordinal()); +// if (router.getEcoMode()) compoundTag.putBoolean("EcoMode", true); +// CompoundTag upgrades = getUpgrades(router); +// if (!upgrades.isEmpty()) compoundTag.put("Upgrades", upgrades); +// } else { +// compoundTag.putBoolean("Denied", true); +// } +// } +// } +// +// private CompoundTag getUpgrades(ModularRouterBlockEntity router) { +// IItemHandler handler = router.getUpgrades(); +// Map counts = new HashMap<>(); +// for (int i = 0; i < handler.getSlots(); i++) { +// ItemStack stack = handler.getStackInSlot(i); +// if (stack.getItem() instanceof UpgradeItem) { +// counts.put(stack.getItem(), counts.getOrDefault(stack.getItem(), 0) + stack.getCount()); +// } +// } +// return Util.make(new CompoundTag(), tag -> counts.forEach((k, v) -> tag.putInt(k.getDescriptionId(), v))); +// } +// +// @Override +// public Identifier getUid() { +// return RL("router"); +// } +//} diff --git a/src/main/java/me/desht/modularrouters/integration/jei/JEIModularRoutersPlugin.java b/src/main/java/me/desht/modularrouters/integration/jei/JEIModularRoutersPlugin.java index 02cdf2ff..f915b8f1 100644 --- a/src/main/java/me/desht/modularrouters/integration/jei/JEIModularRoutersPlugin.java +++ b/src/main/java/me/desht/modularrouters/integration/jei/JEIModularRoutersPlugin.java @@ -16,7 +16,7 @@ import mezz.jei.api.registration.IIngredientAliasRegistration; import net.minecraft.client.renderer.Rect2i; import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.neoforged.neoforge.fluids.FluidUtil; @@ -41,7 +41,7 @@ public JEIModularRoutersPlugin() { } @Override - public ResourceLocation getPluginUid() { + public Identifier getPluginUid() { return RL("default"); } diff --git a/src/main/java/me/desht/modularrouters/integration/patchouli/PatchouliHelper.java b/src/main/java/me/desht/modularrouters/integration/patchouli/PatchouliHelper.java index 391743a3..b2c7ee03 100644 --- a/src/main/java/me/desht/modularrouters/integration/patchouli/PatchouliHelper.java +++ b/src/main/java/me/desht/modularrouters/integration/patchouli/PatchouliHelper.java @@ -1,14 +1,16 @@ package me.desht.modularrouters.integration.patchouli; import me.desht.modularrouters.ModularRouters; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; -import vazkii.patchouli.api.PatchouliAPI; +import net.minecraft.world.item.Items; public class PatchouliHelper { - private static final ResourceLocation BOOK_ID = ResourceLocation.fromNamespaceAndPath(ModularRouters.MODID, "book"); + private static final Identifier BOOK_ID = Identifier.fromNamespaceAndPath(ModularRouters.MODID, "book"); + // TODO: Reimplement once Patchouli is updated public static ItemStack makePatchouliBook() { - return PatchouliAPI.get().getBookStack(BOOK_ID); + return new ItemStack(Items.BOOK); +// return PatchouliAPI.get().getBookStack(BOOK_ID); } } diff --git a/src/main/java/me/desht/modularrouters/integration/top/ElementModule.java b/src/main/java/me/desht/modularrouters/integration/top/ElementModule.java index 210c3754..028e2e1c 100644 --- a/src/main/java/me/desht/modularrouters/integration/top/ElementModule.java +++ b/src/main/java/me/desht/modularrouters/integration/top/ElementModule.java @@ -1,67 +1,67 @@ -package me.desht.modularrouters.integration.top; - -import mcjty.theoneprobe.api.IElement; -import mcjty.theoneprobe.api.IElementFactory; -import me.desht.modularrouters.item.module.ModuleItem; -import me.desht.modularrouters.logic.settings.RelativeDirection; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.network.RegistryFriendlyByteBuf; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import org.apache.commons.lang3.Validate; - -public class ElementModule implements IElement { - private final ItemStack stack; - private final RelativeDirection dir; - - public ElementModule(ItemStack stack) { - Validate.isTrue(stack.getItem() instanceof ModuleItem, "provided item stack is not an ItemModule!"); - this.stack = stack; - this.dir = ModuleItem.getCommonSettings(stack).facing(); - } - - public ElementModule(RegistryFriendlyByteBuf buf) { - this.stack = ItemStack.STREAM_CODEC.decode(buf); - this.dir = buf.readEnum(RelativeDirection.class); - } - - @Override - public void render(GuiGraphics graphics, int x, int y) { - graphics.renderItem(stack, x + (getWidth() - 18) / 2, y + (getHeight() - 18) / 2); - graphics.renderItemDecorations(Minecraft.getInstance().font, stack, x + (getWidth() - 18) / 2, y + (getHeight() - 18) / 2, dir.getSymbol()); - } - - @Override - public int getWidth() { - return 20; - } - - @Override - public int getHeight() { - return 20; - } - - @Override - public void toBytes(RegistryFriendlyByteBuf buffer) { - ItemStack.STREAM_CODEC.encode(buffer, stack); - buffer.writeEnum(dir); - } - - @Override - public ResourceLocation getID() { - return TOPCompatibility.ELEMENT_MODULE_ITEM; - } - - public static class Factory implements IElementFactory { - @Override - public IElement createElement(RegistryFriendlyByteBuf buf) { - return new ElementModule(buf); - } - - @Override - public ResourceLocation getId() { - return TOPCompatibility.ELEMENT_MODULE_ITEM; - } - } -} +//package me.desht.modularrouters.integration.top; +// +//import mcjty.theoneprobe.api.IElement; +//import mcjty.theoneprobe.api.IElementFactory; +//import me.desht.modularrouters.item.module.ModuleItem; +//import me.desht.modularrouters.logic.settings.RelativeDirection; +//import net.minecraft.client.Minecraft; +//import net.minecraft.client.gui.GuiGraphics; +//import net.minecraft.network.RegistryFriendlyByteBuf; +//import net.minecraft.resources.Identifier; +//import net.minecraft.world.item.ItemStack; +//import org.apache.commons.lang3.Validate; +// +//public class ElementModule implements IElement { +// private final ItemStack stack; +// private final RelativeDirection dir; +// +// public ElementModule(ItemStack stack) { +// Validate.isTrue(stack.getItem() instanceof ModuleItem, "provided item stack is not an ItemModule!"); +// this.stack = stack; +// this.dir = ModuleItem.getCommonSettings(stack).facing(); +// } +// +// public ElementModule(RegistryFriendlyByteBuf buf) { +// this.stack = ItemStack.STREAM_CODEC.decode(buf); +// this.dir = buf.readEnum(RelativeDirection.class); +// } +// +// @Override +// public void render(GuiGraphics graphics, int x, int y) { +// graphics.renderItem(stack, x + (getWidth() - 18) / 2, y + (getHeight() - 18) / 2); +// graphics.renderItemDecorations(Minecraft.getInstance().font, stack, x + (getWidth() - 18) / 2, y + (getHeight() - 18) / 2, dir.getSymbol()); +// } +// +// @Override +// public int getWidth() { +// return 20; +// } +// +// @Override +// public int getHeight() { +// return 20; +// } +// +// @Override +// public void toBytes(RegistryFriendlyByteBuf buffer) { +// ItemStack.STREAM_CODEC.encode(buffer, stack); +// buffer.writeEnum(dir); +// } +// +// @Override +// public Identifier getID() { +// return TOPCompatibility.ELEMENT_MODULE_ITEM; +// } +// +// public static class Factory implements IElementFactory { +// @Override +// public IElement createElement(RegistryFriendlyByteBuf buf) { +// return new ElementModule(buf); +// } +// +// @Override +// public Identifier getId() { +// return TOPCompatibility.ELEMENT_MODULE_ITEM; +// } +// } +//} diff --git a/src/main/java/me/desht/modularrouters/integration/top/TOPCompatibility.java b/src/main/java/me/desht/modularrouters/integration/top/TOPCompatibility.java index 663d57dc..773702dc 100644 --- a/src/main/java/me/desht/modularrouters/integration/top/TOPCompatibility.java +++ b/src/main/java/me/desht/modularrouters/integration/top/TOPCompatibility.java @@ -1,46 +1,46 @@ -package me.desht.modularrouters.integration.top; - -import mcjty.theoneprobe.api.*; -import me.desht.modularrouters.ModularRouters; -import me.desht.modularrouters.block.ModularRouterBlock; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.fml.InterModComms; - -import java.util.function.Function; - -import static me.desht.modularrouters.util.MiscUtil.RL; - -public class TOPCompatibility { - private static boolean registered; - - static final ResourceLocation ELEMENT_MODULE_ITEM = RL("module"); - - public static void register() { - if (!registered) { - registered = true; - InterModComms.sendTo("theoneprobe", "getTheOneProbe", () -> (Function) iTheOneProbe -> { - ModularRouters.LOGGER.info("Enabled support for The One Probe"); - - iTheOneProbe.registerElementFactory(new ElementModule.Factory()); - - iTheOneProbe.registerProvider(new IProbeInfoProvider() { - @Override - public ResourceLocation getID() { - return RL("default"); - } - - @Override - public void addProbeInfo(ProbeMode probeMode, IProbeInfo probeInfo, Player player, Level world, BlockState blockState, IProbeHitData iProbeHitData) { - if (blockState.getBlock() instanceof ModularRouterBlock) { - TOPInfoProvider.addProbeInfo(probeMode, probeInfo, player, world, blockState, iProbeHitData); - } - } - }); - return null; - }); - } - } -} \ No newline at end of file +//package me.desht.modularrouters.integration.top; +// +//import mcjty.theoneprobe.api.*; +//import me.desht.modularrouters.ModularRouters; +//import me.desht.modularrouters.block.ModularRouterBlock; +//import net.minecraft.resources.Identifier; +//import net.minecraft.world.entity.player.Player; +//import net.minecraft.world.level.Level; +//import net.minecraft.world.level.block.state.BlockState; +//import net.neoforged.fml.InterModComms; +// +//import java.util.function.Function; +// +//import static me.desht.modularrouters.util.MiscUtil.RL; +// +//public class TOPCompatibility { +// private static boolean registered; +// +// static final Identifier ELEMENT_MODULE_ITEM = RL("module"); +// +// public static void register() { +// if (!registered) { +// registered = true; +// InterModComms.sendTo("theoneprobe", "getTheOneProbe", () -> (Function) iTheOneProbe -> { +// ModularRouters.LOGGER.info("Enabled support for The One Probe"); +// +// iTheOneProbe.registerElementFactory(new ElementModule.Factory()); +// +// iTheOneProbe.registerProvider(new IProbeInfoProvider() { +// @Override +// public Identifier getID() { +// return RL("default"); +// } +// +// @Override +// public void addProbeInfo(ProbeMode probeMode, IProbeInfo probeInfo, Player player, Level world, BlockState blockState, IProbeHitData iProbeHitData) { +// if (blockState.getBlock() instanceof ModularRouterBlock) { +// TOPInfoProvider.addProbeInfo(probeMode, probeInfo, player, world, blockState, iProbeHitData); +// } +// } +// }); +// return null; +// }); +// } +// } +//} diff --git a/src/main/java/me/desht/modularrouters/integration/top/TOPInfoProvider.java b/src/main/java/me/desht/modularrouters/integration/top/TOPInfoProvider.java index 7ca8fb24..823190cf 100644 --- a/src/main/java/me/desht/modularrouters/integration/top/TOPInfoProvider.java +++ b/src/main/java/me/desht/modularrouters/integration/top/TOPInfoProvider.java @@ -1,46 +1,46 @@ -package me.desht.modularrouters.integration.top; - -import mcjty.theoneprobe.api.IProbeHitData; -import mcjty.theoneprobe.api.IProbeInfo; -import mcjty.theoneprobe.api.ProbeMode; -import me.desht.modularrouters.core.ModBlockEntities; -import net.minecraft.ChatFormatting; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.state.BlockState; -import net.neoforged.neoforge.items.IItemHandler; - -class TOPInfoProvider { - static void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, Player player, Level world, BlockState blockState, IProbeHitData data) { - world.getBlockEntity(data.getPos(), ModBlockEntities.MODULAR_ROUTER.get()).ifPresent(router -> { - if (router.isPermitted(player)) { - IItemHandler modules = router.getModules(); - IProbeInfo sub = probeInfo.horizontal(); - for (int i = 0; i < modules.getSlots(); i++) { - ItemStack stack = modules.getStackInSlot(i); - if (!stack.isEmpty()) { - sub.element(new ElementModule(stack)); - } - } - sub = probeInfo.horizontal(); - IItemHandler upgrades = router.getUpgrades(); - for (int i = 0; i < upgrades.getSlots(); i++) { - ItemStack stack = upgrades.getStackInSlot(i); - if (!stack.isEmpty()) { - sub.item(stack); - } - } - - probeInfo.text(Component.literal(ChatFormatting.YELLOW.toString()) - .append(Component.translatable("modularrouters.guiText.tooltip.redstone.label")) - .append(ChatFormatting.WHITE + ": ") - .append(Component.translatable(router.getRedstoneBehaviour().getTranslationKey())) - ); - } else { - probeInfo.text(Component.translatable("modularrouters.chatText.security.accessDenied").withStyle(ChatFormatting.RED)); - } - }); - } -} +//package me.desht.modularrouters.integration.top; +// +//import mcjty.theoneprobe.api.IProbeHitData; +//import mcjty.theoneprobe.api.IProbeInfo; +//import mcjty.theoneprobe.api.ProbeMode; +//import me.desht.modularrouters.core.ModBlockEntities; +//import net.minecraft.ChatFormatting; +//import net.minecraft.network.chat.Component; +//import net.minecraft.world.entity.player.Player; +//import net.minecraft.world.item.ItemStack; +//import net.minecraft.world.level.Level; +//import net.minecraft.world.level.block.state.BlockState; +//import net.neoforged.neoforge.items.IItemHandler; +// +//class TOPInfoProvider { +// static void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, Player player, Level world, BlockState blockState, IProbeHitData data) { +// world.getBlockEntity(data.getPos(), ModBlockEntities.MODULAR_ROUTER.get()).ifPresent(router -> { +// if (router.isPermitted(player)) { +// IItemHandler modules = router.getModules(); +// IProbeInfo sub = probeInfo.horizontal(); +// for (int i = 0; i < modules.getSlots(); i++) { +// ItemStack stack = modules.getStackInSlot(i); +// if (!stack.isEmpty()) { +// sub.element(new ElementModule(stack)); +// } +// } +// sub = probeInfo.horizontal(); +// IItemHandler upgrades = router.getUpgrades(); +// for (int i = 0; i < upgrades.getSlots(); i++) { +// ItemStack stack = upgrades.getStackInSlot(i); +// if (!stack.isEmpty()) { +// sub.item(stack); +// } +// } +// +// probeInfo.text(Component.literal(ChatFormatting.YELLOW.toString()) +// .append(Component.translatable("modularrouters.guiText.tooltip.redstone.label")) +// .append(ChatFormatting.WHITE + ": ") +// .append(Component.translatable(router.getRedstoneBehaviour().getTranslationKey())) +// ); +// } else { +// probeInfo.text(Component.translatable("modularrouters.chatText.security.accessDenied").withStyle(ChatFormatting.RED)); +// } +// }); +// } +//} diff --git a/src/main/java/me/desht/modularrouters/item/IPlayerOwned.java b/src/main/java/me/desht/modularrouters/item/IPlayerOwned.java index 6d416d6b..cf4c34e8 100644 --- a/src/main/java/me/desht/modularrouters/item/IPlayerOwned.java +++ b/src/main/java/me/desht/modularrouters/item/IPlayerOwned.java @@ -3,6 +3,7 @@ import com.mojang.authlib.GameProfile; import me.desht.modularrouters.core.ModDataComponents; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.player.PlayerSkin; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.ResolvableProfile; @@ -12,11 +13,11 @@ public interface IPlayerOwned { default Optional getOwnerProfile(ItemStack stack) { //noinspection DataFlowIssue return stack.has(ModDataComponents.OWNER) ? - Optional.of(stack.get(ModDataComponents.OWNER).gameProfile()) : + Optional.of(stack.get(ModDataComponents.OWNER).partialProfile()) : Optional.empty(); } default void setOwner(ItemStack stack, Player player) { - stack.set(ModDataComponents.OWNER, new ResolvableProfile(player.getGameProfile())); + stack.set(ModDataComponents.OWNER, ResolvableProfile.createResolved(player.getGameProfile())); } } diff --git a/src/main/java/me/desht/modularrouters/item/MRBaseItem.java b/src/main/java/me/desht/modularrouters/item/MRBaseItem.java index f0c038e7..8244af96 100644 --- a/src/main/java/me/desht/modularrouters/item/MRBaseItem.java +++ b/src/main/java/me/desht/modularrouters/item/MRBaseItem.java @@ -4,6 +4,7 @@ import me.desht.modularrouters.client.util.ClientUtil; import me.desht.modularrouters.config.ConfigHolder; import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.network.chat.Component; @@ -30,7 +31,7 @@ public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisp if (ClientUtil.isKeyDown(KeyBindings.keybindModuleInfo)) { addUsageInformation(stack, tooltipAdder); - } else if (ConfigHolder.client.misc.alwaysShowModuleSettings.get() || Screen.hasShiftDown()) { + } else if (ConfigHolder.client.misc.alwaysShowModuleSettings.get() || Minecraft.getInstance().hasShiftDown()) { addExtraInformation(stack, tooltipAdder); tooltipAdder.accept(Component.empty()); tooltipAdder.accept(xlate("modularrouters.itemText.misc.holdKey", text).withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC)); diff --git a/src/main/java/me/desht/modularrouters/item/module/EnergyDistributorModule.java b/src/main/java/me/desht/modularrouters/item/module/EnergyDistributorModule.java index 3db6a3c6..84f774d9 100644 --- a/src/main/java/me/desht/modularrouters/item/module/EnergyDistributorModule.java +++ b/src/main/java/me/desht/modularrouters/item/module/EnergyDistributorModule.java @@ -61,7 +61,7 @@ public int getHardMaxRange() { @Override public boolean isValidTarget(UseOnContext ctx) { - return ctx.getLevel().getCapability(Capabilities.EnergyStorage.BLOCK, ctx.getClickedPos(), ctx.getClickedFace()) != null; + return ctx.getLevel().getCapability(Capabilities.Energy.BLOCK, ctx.getClickedPos(), ctx.getClickedFace()) != null; } @Override diff --git a/src/main/java/me/desht/modularrouters/item/module/ModuleItem.java b/src/main/java/me/desht/modularrouters/item/module/ModuleItem.java index 3d4e80bb..c7ca31f8 100644 --- a/src/main/java/me/desht/modularrouters/item/module/ModuleItem.java +++ b/src/main/java/me/desht/modularrouters/item/module/ModuleItem.java @@ -300,7 +300,7 @@ private void addFilterInformation(ItemStack itemstack, Consumer consu public InteractionResult use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); if (!player.isShiftKeyDown()) { - if (!world.isClientSide) { + if (!world.isClientSide()) { MFLocator locator = MFLocator.heldModule(hand); player.openMenu(new ModuleMenuProvider(player, locator), locator::toNetwork); return InteractionResult.SUCCESS_SERVER; diff --git a/src/main/java/me/desht/modularrouters/item/module/PlayerModule.java b/src/main/java/me/desht/modularrouters/item/module/PlayerModule.java index cce0d14e..fe84f429 100644 --- a/src/main/java/me/desht/modularrouters/item/module/PlayerModule.java +++ b/src/main/java/me/desht/modularrouters/item/module/PlayerModule.java @@ -39,7 +39,7 @@ public void addSettingsInformation(ItemStack stack, Consumer tooltipA PlayerSettings settings = stack.getOrDefault(ModDataComponents.PLAYER_SETTINGS, PlayerSettings.DEFAULT); ResolvableProfile profile = stack.get(ModDataComponents.OWNER); - String owner = profile == null ? "-" : profile.gameProfile().getName(); + String owner = profile == null ? "-" : profile.partialProfile().name(); tooltipAdder.accept(xlate("modularrouters.itemText.security.owner", colorText(owner, ChatFormatting.AQUA)).withStyle(ChatFormatting.YELLOW)); Component c = xlate("modularrouters.itemText.misc.operation").withStyle(ChatFormatting.YELLOW) @@ -66,7 +66,7 @@ public boolean isDirectional() { @Override public InteractionResult useOn(UseOnContext ctx) { - if (ctx.getLevel().isClientSide) { + if (ctx.getLevel().isClientSide()) { return InteractionResult.SUCCESS; } else if (ctx.getPlayer() != null && ctx.getPlayer().isSteppingCarefully()) { setOwner(ctx.getItemInHand(), ctx.getPlayer()); @@ -89,7 +89,7 @@ public int getEnergyCost(ItemStack stack) { @Override public void doModuleValidation(ItemStack stack, ServerPlayer player) { - TargetValidation v = ModularRouters.getDimensionBlacklist().test(player.level().dimension().location()) ? + TargetValidation v = ModularRouters.getDimensionBlacklist().test(player.level().dimension().identifier()) ? TargetValidation.BAD_DIMENSION : TargetValidation.OK; MutableComponent msg = Component.translatable(v.translationKey()).withStyle(v.getColor()); diff --git a/src/main/java/me/desht/modularrouters/item/module/SenderModule3.java b/src/main/java/me/desht/modularrouters/item/module/SenderModule3.java index 69c9f6d0..3c090567 100644 --- a/src/main/java/me/desht/modularrouters/item/module/SenderModule3.java +++ b/src/main/java/me/desht/modularrouters/item/module/SenderModule3.java @@ -38,6 +38,6 @@ public int getEnergyCost(ItemStack stack) { @Override public boolean canOperateInDimension(ResourceKey dimension) { - return !ModularRouters.getDimensionBlacklist().test(dimension.location()); + return !ModularRouters.getDimensionBlacklist().test(dimension.identifier()); } } diff --git a/src/main/java/me/desht/modularrouters/item/module/adapter/TargetedModuleAdapter.java b/src/main/java/me/desht/modularrouters/item/module/adapter/TargetedModuleAdapter.java index 7ffa6a7e..7e0d683c 100644 --- a/src/main/java/me/desht/modularrouters/item/module/adapter/TargetedModuleAdapter.java +++ b/src/main/java/me/desht/modularrouters/item/module/adapter/TargetedModuleAdapter.java @@ -49,7 +49,7 @@ public InteractionResult useOn(UseOnContext ctx) { @Override public InteractionResult onSneakRightClick(ItemStack stack, Level world, Player player, InteractionHand hand) { - if (!world.isClientSide && !ITargetedModule.getTargets(stack, false).isEmpty() && targeted.getMaxTargets() == 1) { + if (!world.isClientSide() && !ITargetedModule.getTargets(stack, false).isEmpty() && targeted.getMaxTargets() == 1) { ITargetedModule.setTargets(stack, Set.of()); world.playSound(null, player.blockPosition(), ModSounds.SUCCESS.get(), SoundSource.BLOCKS, ConfigHolder.common.sound.bleepVolume.get().floatValue(), 1.1f); @@ -60,7 +60,7 @@ public InteractionResult onSneakRightClick(ItemStack stack, Level world, Player } private void handleSingleTarget(ItemStack stack, Player player, Level world, BlockPos pos, Direction face) { - if (!world.isClientSide) { + if (!world.isClientSide()) { ITargetedModule.setTargets(stack, Set.of(new ModuleTarget(world, pos, face))); var tgts = ITargetedModule.getTargets(stack, true); if (!tgts.isEmpty()) { @@ -73,14 +73,14 @@ private void handleSingleTarget(ItemStack stack, Player player, Level world, Blo } private InteractionResult handleMultiTarget(ItemStack stack, UseOnContext context, Player player, Level world, BlockPos pos, Direction face) { - Set targets = ITargetedModule.getTargets(stack, !world.isClientSide); + Set targets = ITargetedModule.getTargets(stack, !world.isClientSide()); String invName = BlockUtil.getBlockName(world, pos); GlobalPos gPos = MiscUtil.makeGlobalPos(world, pos); ModuleTarget tgt = new ModuleTarget(gPos, face, invName); // Allow removing targets without checking if they're valid if (targets.contains(tgt)) { - if (world.isClientSide) return InteractionResult.SUCCESS; + if (world.isClientSide()) return InteractionResult.SUCCESS; targets.remove(tgt); player.displayClientMessage(Component.translatable("modularrouters.chatText.misc.targetRemoved", targets.size(), targeted.getMaxTargets()) @@ -91,7 +91,7 @@ private InteractionResult handleMultiTarget(ItemStack stack, UseOnContext contex } if (ITargetedModule.canSelectTarget(context)) { - if (world.isClientSide) return InteractionResult.SUCCESS; + if (world.isClientSide()) return InteractionResult.SUCCESS; if (targets.size() < targeted.getMaxTargets()) { targets.add(tgt); player.displayClientMessage(Component.translatable("modularrouters.chatText.misc.targetAdded", targets.size(), targeted.getMaxTargets()) diff --git a/src/main/java/me/desht/modularrouters/item/smartfilter/BulkItemFilter.java b/src/main/java/me/desht/modularrouters/item/smartfilter/BulkItemFilter.java index fc201321..d959b2ce 100644 --- a/src/main/java/me/desht/modularrouters/item/smartfilter/BulkItemFilter.java +++ b/src/main/java/me/desht/modularrouters/item/smartfilter/BulkItemFilter.java @@ -59,7 +59,7 @@ public AbstractSmartFilterMenu createMenu(int windowId, Inventory invPlayer, MFL @Override public InteractionResult useOn(UseOnContext ctx) { - return ctx.getLevel().isClientSide ? InteractionResult.SUCCESS : handleUseServerSide(ctx); + return ctx.getLevel().isClientSide() ? InteractionResult.SUCCESS : handleUseServerSide(ctx); } @Override diff --git a/src/main/java/me/desht/modularrouters/item/smartfilter/SmartFilterItem.java b/src/main/java/me/desht/modularrouters/item/smartfilter/SmartFilterItem.java index 34c3f24a..581e6533 100644 --- a/src/main/java/me/desht/modularrouters/item/smartfilter/SmartFilterItem.java +++ b/src/main/java/me/desht/modularrouters/item/smartfilter/SmartFilterItem.java @@ -67,10 +67,10 @@ public InteractionResult use(Level world, Player player, InteractionHand hand) { MFLocator loc = MFLocator.heldFilter(hand); if (player instanceof ServerPlayer sp && filter.hasMenu()) { sp.openMenu(new FilterMenuProvider(player, loc), loc::toNetwork); - } else if (world.isClientSide && !hasMenu()) { + } else if (world.isClientSide() && !hasMenu()) { FilterScreenFactory.openFilterGui(loc); } - return world.isClientSide ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; + return world.isClientSide() ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; } public static class FilterMenuProvider implements MenuProvider { diff --git a/src/main/java/me/desht/modularrouters/item/smartfilter/TagFilter.java b/src/main/java/me/desht/modularrouters/item/smartfilter/TagFilter.java index 6bb308eb..bb918050 100644 --- a/src/main/java/me/desht/modularrouters/item/smartfilter/TagFilter.java +++ b/src/main/java/me/desht/modularrouters/item/smartfilter/TagFilter.java @@ -9,7 +9,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.Item; @@ -27,8 +27,8 @@ public TagFilter(Properties properties) { public static List> getTagList(ItemStack filterStack) { List strings = filterStack.getOrDefault(ModDataComponents.FILTER_STRINGS, List.of()); return strings.stream() - .filter(rl -> ResourceLocation.tryParse(rl) != null) - .map(s -> TagKey.create(Registries.ITEM, ResourceLocation.parse(s))) + .filter(rl -> Identifier.tryParse(rl) != null) + .map(s -> TagKey.create(Registries.ITEM, Identifier.parse(s))) .toList(); } diff --git a/src/main/java/me/desht/modularrouters/item/upgrade/CamouflageUpgrade.java b/src/main/java/me/desht/modularrouters/item/upgrade/CamouflageUpgrade.java index d6d532e0..f1ce38de 100644 --- a/src/main/java/me/desht/modularrouters/item/upgrade/CamouflageUpgrade.java +++ b/src/main/java/me/desht/modularrouters/item/upgrade/CamouflageUpgrade.java @@ -56,7 +56,7 @@ public InteractionResult useOn(UseOnContext ctx) { BlockState state = ctx.getLevel().getBlockState(ctx.getClickedPos()); if (isBlockOKForCamo(state)) { setCamoState(stack, state); - if (!ctx.getLevel().isClientSide) { + if (!ctx.getLevel().isClientSide()) { player.displayClientMessage(Component.translatable("modularrouters.itemText.camouflage.held") .append(ChatFormatting.AQUA.toString()) .append(getCamoStateDisplayName(stack)) @@ -65,7 +65,7 @@ public InteractionResult useOn(UseOnContext ctx) { player.playSound(ModSounds.SUCCESS.get(), ConfigHolder.common.sound.bleepVolume.get().floatValue(), 1.5f); } return InteractionResult.SUCCESS; - } else if (ctx.getLevel().isClientSide) { + } else if (ctx.getLevel().isClientSide()) { player.playSound(ModSounds.ERROR.get(), 1.0f, 1.0f); player.displayClientMessage(Component.translatable("modularrouters.chatText.misc.badCamoBlock").withStyle(ChatFormatting.RED), true); return InteractionResult.FAIL; diff --git a/src/main/java/me/desht/modularrouters/item/upgrade/SecurityUpgrade.java b/src/main/java/me/desht/modularrouters/item/upgrade/SecurityUpgrade.java index 09b381f9..56623649 100644 --- a/src/main/java/me/desht/modularrouters/item/upgrade/SecurityUpgrade.java +++ b/src/main/java/me/desht/modularrouters/item/upgrade/SecurityUpgrade.java @@ -38,7 +38,7 @@ public SecurityUpgrade(Properties properties) { @Override public void addExtraInformation(ItemStack itemstack, Consumer consumer) { - String owner = getOwnerProfile(itemstack).map(GameProfile::getName).orElse("-"); + String owner = getOwnerProfile(itemstack).map(GameProfile::name).orElse("-"); consumer.accept(ClientUtil.xlate("modularrouters.itemText.security.owner", ChatFormatting.AQUA + owner)); Set names = getPlayerNames(itemstack); @@ -67,7 +67,7 @@ public TintColor getItemTint() { private Set getPlayerIDs(ItemStack stack) { return stack.getOrDefault(ModDataComponents.SECURITY_LIST, SecurityList.DEFAULT).trusted().stream() - .map(tp -> tp.gameProfile().getId()) + .map(tp -> tp.partialProfile().id()) .collect(Collectors.toSet()); } @@ -79,7 +79,7 @@ private Set getPlayerIDs(ItemStack stack) { */ private static Set getPlayerNames(ItemStack stack) { return stack.getOrDefault(ModDataComponents.SECURITY_LIST, SecurityList.DEFAULT).trusted().stream() - .map(tp -> tp.gameProfile().getName()) + .map(tp -> tp.partialProfile().name()) .collect(Collectors.toSet()); } @@ -115,7 +115,7 @@ private static Result removePlayer(ItemStack stack, GameProfile profile) { @Override public InteractionResult use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - if (!player.level().isClientSide && player.isSteppingCarefully()) { + if (!player.level().isClientSide() && player.isSteppingCarefully()) { setOwner(stack, player); Component displayName = Objects.requireNonNullElse(player.getDisplayName(), Component.literal("?")); player.displayClientMessage(Component.translatable("modularrouters.itemText.security.owner", displayName.getString()), false); @@ -129,12 +129,12 @@ public InteractionResult interactLivingEntity(ItemStack stack, Player player, Li if (entity instanceof Player targetPlayer) { GameProfile profile = targetPlayer.getGameProfile(); Result res = player.isSteppingCarefully() ? removePlayer(stack, profile) : addPlayer(stack, profile); - if (player.level().isClientSide) { + if (player.level().isClientSide()) { player.playSound(res.isError() ? ModSounds.ERROR.get() : ModSounds.SUCCESS.get(), ConfigHolder.common.sound.bleepVolume.get().floatValue(), 1.0f); return InteractionResult.SUCCESS; } else { - player.displayClientMessage(Component.translatable(res.getTranslationKey(), profile.getName()), false); + player.displayClientMessage(Component.translatable(res.getTranslationKey(), profile.name()), false); return InteractionResult.SUCCESS_SERVER; } } @@ -184,13 +184,14 @@ public record SecurityList(List trusted) { public SecurityList add(GameProfile profile) { Set l = new HashSet<>(trusted); - l.add(new ResolvableProfile(profile)); + l.add(ResolvableProfile.createResolved(profile)); return new SecurityList(List.copyOf(l)); } public SecurityList remove(GameProfile profile) { + // TODO: Partial profile might not equal profile. List l = trusted.stream() - .filter(rp -> !rp.gameProfile().equals(profile)) + .filter(rp -> !rp.partialProfile().equals(profile)) .toList(); return new SecurityList(l); } diff --git a/src/main/java/me/desht/modularrouters/item/upgrade/SyncUpgrade.java b/src/main/java/me/desht/modularrouters/item/upgrade/SyncUpgrade.java index 0ecc1bbd..330353df 100644 --- a/src/main/java/me/desht/modularrouters/item/upgrade/SyncUpgrade.java +++ b/src/main/java/me/desht/modularrouters/item/upgrade/SyncUpgrade.java @@ -55,16 +55,16 @@ public TintColor getItemTint() { @Override public InteractionResult use(Level world, Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); - if (world.isClientSide && !player.isShiftKeyDown()) { + if (world.isClientSide() && !player.isShiftKeyDown()) { SyncUpgradeScreen.openSyncGui(stack, hand); } else if (player.isShiftKeyDown()) { - if (!world.isClientSide) { + if (!world.isClientSide()) { setTunedValue(stack, world.random.nextInt(ConfigHolder.common.router.baseTickRate.get())); player.displayClientMessage(Component.translatable("modularrouters.itemText.sync.tuning", getTunedValue(stack)), true); } else { player.playSound(ModSounds.SUCCESS.get(), ConfigHolder.common.sound.bleepVolume.get().floatValue(), 1.5f); } } - return world.isClientSide ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; + return world.isClientSide() ? InteractionResult.SUCCESS : InteractionResult.SUCCESS_SERVER; } } diff --git a/src/main/java/me/desht/modularrouters/logic/ModuleTarget.java b/src/main/java/me/desht/modularrouters/logic/ModuleTarget.java index 4add9637..3b498d78 100644 --- a/src/main/java/me/desht/modularrouters/logic/ModuleTarget.java +++ b/src/main/java/me/desht/modularrouters/logic/ModuleTarget.java @@ -84,8 +84,8 @@ public boolean isSameWorld(ModuleTarget dst) { * @return a (lazy optional) item handler */ public boolean hasItemHandler(Level level) { - return level.dimension().location().equals(gPos.dimension().location()) - && level.getCapability(Capabilities.ItemHandler.BLOCK, gPos.pos(), face) != null; + return level.dimension().identifier().equals(gPos.dimension().identifier()) + && level.getCapability(Capabilities.Item.BLOCK, gPos.pos(), face) != null; } /** @@ -94,7 +94,7 @@ public boolean hasItemHandler(Level level) { * @return an optional item handler */ public Optional getItemHandler() { - return getCapability(Capabilities.ItemHandler.BLOCK); + return getCapability(Capabilities.Item.BLOCK); } /** @@ -103,7 +103,7 @@ public Optional getItemHandler() { * @return an optional fluid handler */ public Optional getFluidHandler() { - return getCapability(Capabilities.FluidHandler.BLOCK); + return getCapability(Capabilities.Fluid.BLOCK); } /** @@ -112,7 +112,7 @@ public Optional getFluidHandler() { * @return an optional energy handler */ public Optional getEnergyHandler() { - return getCapability(Capabilities.EnergyStorage.BLOCK); + return getCapability(Capabilities.Energy.BLOCK); } /** diff --git a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledDistributorModule.java b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledDistributorModule.java index 250ac3bf..8666d25e 100644 --- a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledDistributorModule.java +++ b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledDistributorModule.java @@ -89,7 +89,7 @@ protected int getBeamColor() { @Override protected List setupTargets(ModularRouterBlockEntity router, ItemStack stack) { - Set t = ITargetedModule.getTargets(stack, router != null && !router.nonNullLevel().isClientSide); + Set t = ITargetedModule.getTargets(stack, router != null && !router.nonNullLevel().isClientSide()); List l = Lists.newArrayList(t); if (router == null) return l; l.sort(Comparator.comparingDouble(o -> calcDist(o, router))); diff --git a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledFluidModule.java b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledFluidModule.java index fe49c7c3..3da7445c 100644 --- a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledFluidModule.java +++ b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledFluidModule.java @@ -16,6 +16,8 @@ import net.minecraft.tags.FluidTags; import net.minecraft.util.ExtraCodecs; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.attribute.EnvironmentAttribute; +import net.minecraft.world.attribute.EnvironmentAttributes; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; @@ -130,7 +132,7 @@ private boolean tryPourOutFluid(ModularRouterBlockEntity router, IFluidHandler r Block block = blockstate.getBlock(); if (world.isEmptyBlock(pos) || isReplaceable || block instanceof LiquidBlockContainer liq && liq.canPlaceLiquid(router.getFakePlayer(), world, pos, blockstate, toPlace.getFluid())) { - if (world.dimensionType().ultraWarm() && fluid.is(FluidTags.WATER)) { + if (world.dimensionType().attributes().contains(EnvironmentAttributes.WATER_EVAPORATES) && fluid.is(FluidTags.WATER)) { // no pouring water in the nether! playEvaporationEffects(world, pos, fluid); } else if (block instanceof LiquidBlockContainer liq) { diff --git a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledModule.java b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledModule.java index f8e6e8a3..b562a14d 100644 --- a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledModule.java +++ b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledModule.java @@ -236,7 +236,7 @@ protected List setupTargets(ModularRouterBlockEntity router, ItemS if (router == null || (module.isDirectional() && getDirection() == RelativeDirection.NONE)) { return List.of(); } else if (module instanceof ITargetedModule) { - return List.copyOf(ITargetedModule.getTargets(stack, !router.nonNullLevel().isClientSide)); + return List.copyOf(ITargetedModule.getTargets(stack, !router.nonNullLevel().isClientSide())); } Direction facing = router.getAbsoluteFacing(getDirection()); BlockPos pos = router.getBlockPos().relative(facing); diff --git a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledPlayerModule.java b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledPlayerModule.java index 23e36575..5987fae5 100644 --- a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledPlayerModule.java +++ b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledPlayerModule.java @@ -42,8 +42,8 @@ public CompiledPlayerModule(ModularRouterBlockEntity router, ItemStack stack) { settings = stack.getOrDefault(ModDataComponents.PLAYER_SETTINGS, PlayerSettings.DEFAULT); playerProfile = ((IPlayerOwned) stack.getItem()).getOwnerProfile(stack).orElse(null); - if (router != null && !router.nonNullLevel().isClientSide) { - Player player = playerProfile == null ? null : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayer(playerProfile.getId()); + if (router != null && !router.nonNullLevel().isClientSide()) { + Player player = playerProfile == null ? null : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayer(playerProfile.id()); playerRef = new WeakReference<>(player); } else { playerRef = new WeakReference<>(null); @@ -100,7 +100,7 @@ public boolean execute(@Nonnull ModularRouterBlockEntity router) { private boolean isDimensionBlacklisted(ModularRouterBlockEntity router, Player player) { WildcardedRLMatcher matcher = ModularRouters.getDimensionBlacklist(); - return matcher.test(router.nonNullLevel().dimension().location()) || matcher.test(player.level().dimension().location()); + return matcher.test(router.nonNullLevel().dimension().identifier()) || matcher.test(player.level().dimension().identifier()); } private Player getPlayer() { @@ -124,7 +124,7 @@ public void onPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) { @Override public void onCompiled(ModularRouterBlockEntity router) { super.onCompiled(router); - if (!router.nonNullLevel().isClientSide) { + if (!router.nonNullLevel().isClientSide()) { NeoForge.EVENT_BUS.register(this); } } @@ -132,17 +132,17 @@ public void onCompiled(ModularRouterBlockEntity router) { @Override public void cleanup(ModularRouterBlockEntity router) { super.cleanup(router); - if (!router.nonNullLevel().isClientSide) { + if (!router.nonNullLevel().isClientSide()) { NeoForge.EVENT_BUS.unregister(this); } } public UUID getPlayerId() { - return playerProfile == null ? null : playerProfile.getId(); + return playerProfile == null ? null : playerProfile.id(); } public String getPlayerName() { - return playerProfile == null ? null : playerProfile.getName(); + return playerProfile == null ? null : playerProfile.name(); } public TransferDirection getTransferDirection() { diff --git a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledSenderModule1.java b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledSenderModule1.java index df8dc2ac..180f21eb 100644 --- a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledSenderModule1.java +++ b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledSenderModule1.java @@ -78,7 +78,7 @@ public ModuleTarget getEffectiveTarget(ModularRouterBlockEntity router) { Direction face = getTarget().face; Level level = router.nonNullLevel(); for (int i = 1; i <= getRange(); i++) { - if (level.getCapability(Capabilities.ItemHandler.BLOCK, pos, getTarget().face) != null) { + if (level.getCapability(Capabilities.Item.BLOCK, pos, getTarget().face) != null) { GlobalPos gPos = MiscUtil.makeGlobalPos(level, pos.immutable()); return new ModuleTarget(gPos, face, BlockUtil.getBlockName(level, pos)); } else if (!isPassable(level, pos, face)) { diff --git a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledVacuumModule.java b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledVacuumModule.java index b6e8d96b..0fc59361 100644 --- a/src/main/java/me/desht/modularrouters/logic/compiled/CompiledVacuumModule.java +++ b/src/main/java/me/desht/modularrouters/logic/compiled/CompiledVacuumModule.java @@ -216,9 +216,9 @@ private IFluidHandler getFluidReceiver(ModularRouterBlockEntity router) { if (fluidReceiverCache == null) { for (Direction face : MiscUtil.DIRECTIONS) { BlockPos pos = router.getBlockPos().relative(face); - IFluidHandler handler = serverLevel.getCapability(Capabilities.FluidHandler.BLOCK, pos, face.getOpposite()); + IFluidHandler handler = serverLevel.getCapability(Capabilities.Fluid.BLOCK, pos, face.getOpposite()); if (handler != null && handler.fill(xpJuiceStack, IFluidHandler.FluidAction.SIMULATE) > 0) { - fluidReceiverCache = BlockCapabilityCache.create(Capabilities.FluidHandler.BLOCK, serverLevel, pos, face.getOpposite(), + fluidReceiverCache = BlockCapabilityCache.create(Capabilities.Fluid.BLOCK, serverLevel, pos, face.getOpposite(), () -> true, () -> fluidReceiverCache = null); break; } diff --git a/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java b/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java index 1687358a..249e18f6 100644 --- a/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java +++ b/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java @@ -176,7 +176,7 @@ private static Optional getHighestEnchantLevel(ItemStack stack) { } private static Optional getEnergyPercent(ItemStack stack) { - IEnergyStorage storage = stack.getCapability(Capabilities.EnergyStorage.ITEM); + IEnergyStorage storage = stack.getCapability(Capabilities.Energy.ITEM); return storage == null ? Optional.empty() : Optional.of(asPercentage(storage.getEnergyStored(), storage.getMaxEnergyStored())); } diff --git a/src/main/java/me/desht/modularrouters/network/messages/ModuleSettingsMessage.java b/src/main/java/me/desht/modularrouters/network/messages/ModuleSettingsMessage.java index 05be04be..46eaa288 100644 --- a/src/main/java/me/desht/modularrouters/network/messages/ModuleSettingsMessage.java +++ b/src/main/java/me/desht/modularrouters/network/messages/ModuleSettingsMessage.java @@ -37,7 +37,7 @@ public Type type() { public static void handleData(ModuleSettingsMessage message, IPayloadContext context) { Player player = context.player(); if (!(player.containerMenu instanceof ModuleMenu)) { - ModularRouters.LOGGER.warn("ignoring ModuleSettingsMessage for {} - player does not have a module GUI open", player.getGameProfile().getName()); + ModularRouters.LOGGER.warn("ignoring ModuleSettingsMessage for {} - player does not have a module GUI open", player.getGameProfile().name()); return; } @@ -48,7 +48,7 @@ public static void handleData(ModuleSettingsMessage message, IPayloadContext con pdcm.applyPatch(message.patch); locator.getRouter(player.level()).ifPresent(router -> router.recompileNeeded(ModularRouterBlockEntity.RecompileFlag.MODULES)); } else { - ModularRouters.LOGGER.warn("ignoring ModuleSettingsMessage for {} - expected module not found @ {}", player.getGameProfile().getName(), locator); + ModularRouters.LOGGER.warn("ignoring ModuleSettingsMessage for {} - expected module not found @ {}", player.getGameProfile().name(), locator); } } } diff --git a/src/main/java/me/desht/modularrouters/recipe/GuideBookRecipe.java b/src/main/java/me/desht/modularrouters/recipe/GuideBookRecipe.java index 1055b0f8..326987c0 100644 --- a/src/main/java/me/desht/modularrouters/recipe/GuideBookRecipe.java +++ b/src/main/java/me/desht/modularrouters/recipe/GuideBookRecipe.java @@ -3,7 +3,7 @@ import me.desht.modularrouters.core.ModItems; import me.desht.modularrouters.core.ModRecipes; import me.desht.modularrouters.integration.patchouli.PatchouliHelper; -import net.minecraft.Util; +import net.minecraft.util.Util; import net.minecraft.core.HolderLookup; import net.minecraft.core.component.DataComponents; import net.minecraft.network.chat.Component; diff --git a/src/main/java/me/desht/modularrouters/util/InventoryUtils.java b/src/main/java/me/desht/modularrouters/util/InventoryUtils.java index 42e943c8..85a6b6df 100644 --- a/src/main/java/me/desht/modularrouters/util/InventoryUtils.java +++ b/src/main/java/me/desht/modularrouters/util/InventoryUtils.java @@ -40,7 +40,7 @@ public static void dropInventoryItems(Level world, BlockPos pos, IItemHandler it } public static Optional getInventory(Level world, BlockPos pos, @Nullable Direction side) { - return Optional.ofNullable(world.getCapability(Capabilities.ItemHandler.BLOCK, pos, side)); + return Optional.ofNullable(world.getCapability(Capabilities.Item.BLOCK, pos, side)); } /** @@ -75,7 +75,7 @@ public static int transferItems(IItemHandler from, IItemHandler to, int slot, in * @return true if the entity was spawned, false otherwise */ public static boolean dropItems(Level world, Vec3 pos, ItemStack stack) { - if (!world.isClientSide) { + if (!world.isClientSide()) { ItemEntity item = new ItemEntity(world, pos.x(), pos.y(), pos.z(), stack); return world.addFreshEntity(item); } diff --git a/src/main/java/me/desht/modularrouters/util/MiscUtil.java b/src/main/java/me/desht/modularrouters/util/MiscUtil.java index faf7c490..020c6091 100644 --- a/src/main/java/me/desht/modularrouters/util/MiscUtil.java +++ b/src/main/java/me/desht/modularrouters/util/MiscUtil.java @@ -11,7 +11,7 @@ import net.minecraft.nbt.Tag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import net.minecraft.server.level.ServerLevel; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Item; @@ -42,17 +42,17 @@ public static String commify(int n) { return NumberFormat.getNumberInstance().format(n); } - public static String locToString(ResourceLocation dim, BlockPos pos) { + public static String locToString(Identifier dim, BlockPos pos) { String s = dim.getNamespace().equals("minecraft") ? dim.getPath() : dim.toString(); return String.format("%s [%d,%d,%d]", s, pos.getX(), pos.getY(), pos.getZ()); } public static String locToString(GlobalPos pos) { - return locToString(pos.dimension().location(), pos.pos()); + return locToString(pos.dimension().identifier(), pos.pos()); } - public static ResourceLocation RL(String name) { - return ResourceLocation.fromNamespaceAndPath(ModularRouters.MODID, name); + public static Identifier RL(String name) { + return Identifier.fromNamespaceAndPath(ModularRouters.MODID, name); } public static int getYawFromFacing(Direction facing) { diff --git a/src/main/java/me/desht/modularrouters/util/WildcardedRLMatcher.java b/src/main/java/me/desht/modularrouters/util/WildcardedRLMatcher.java index 066b947d..a06c103c 100644 --- a/src/main/java/me/desht/modularrouters/util/WildcardedRLMatcher.java +++ b/src/main/java/me/desht/modularrouters/util/WildcardedRLMatcher.java @@ -18,22 +18,22 @@ package me.desht.modularrouters.util; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import java.util.Collection; import java.util.Set; import java.util.function.Predicate; -public class WildcardedRLMatcher implements Predicate { +public class WildcardedRLMatcher implements Predicate { private final Set namespaces = new ObjectOpenHashSet<>(); - private final Set reslocs = new ObjectOpenHashSet<>(); + private final Set reslocs = new ObjectOpenHashSet<>(); public WildcardedRLMatcher(Collection toMatch) { for (String s : toMatch) { if (s.endsWith(":*")) { namespaces.add(s.split(":")[0]); - } else if (ResourceLocation.tryParse(s) != null) { - reslocs.add(ResourceLocation.parse(s)); + } else if (Identifier.tryParse(s) != null) { + reslocs.add(Identifier.parse(s)); } } } @@ -43,7 +43,7 @@ public boolean isEmpty() { } @Override - public boolean test(ResourceLocation resourceLocation) { - return reslocs.contains(resourceLocation) || namespaces.contains(resourceLocation.getNamespace()); + public boolean test(Identifier Identifier) { + return reslocs.contains(Identifier) || namespaces.contains(Identifier.getNamespace()); } } From 14ca18286e101ca713216eb1b9db02fbf9e47a2c Mon Sep 17 00:00:00 2001 From: Michael Hillcox Date: Thu, 29 Jan 2026 23:58:52 +0000 Subject: [PATCH 2/2] feat: most of the rendering fun --- .../client/render/ModRenderTypes.java | 60 +++----- .../render/area/ModuleTargetRenderer.java | 5 +- .../render/blockentity/ModularRouterBER.java | 138 ++++++++++++------ .../blockentity/ModularRouterRenderState.java | 10 ++ .../client/util/ClientUtil.java | 4 +- .../filter/matchers/InspectionMatcher.java | 32 ++-- .../desht/modularrouters/util/BeamData.java | 3 + 7 files changed, 157 insertions(+), 95 deletions(-) create mode 100644 src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterRenderState.java diff --git a/src/main/java/me/desht/modularrouters/client/render/ModRenderTypes.java b/src/main/java/me/desht/modularrouters/client/render/ModRenderTypes.java index b1afa526..a3a35dfd 100644 --- a/src/main/java/me/desht/modularrouters/client/render/ModRenderTypes.java +++ b/src/main/java/me/desht/modularrouters/client/render/ModRenderTypes.java @@ -1,53 +1,39 @@ package me.desht.modularrouters.client.render; import net.minecraft.client.renderer.RenderPipelines; -import net.minecraft.client.renderer.RenderStateShard; -import net.minecraft.client.renderer.RenderType; - -import java.util.OptionalDouble; +import net.minecraft.client.renderer.rendertype.LayeringTransform; +import net.minecraft.client.renderer.rendertype.OutputTarget; +import net.minecraft.client.renderer.rendertype.RenderSetup; +import net.minecraft.client.renderer.rendertype.RenderType; public class ModRenderTypes { - private static final RenderStateShard.LineStateShard THICK_LINE = new RenderStateShard.LineStateShard(OptionalDouble.of(10.0)); - private static final RenderStateShard.LineStateShard THIN_LINE = new RenderStateShard.LineStateShard(OptionalDouble.of(3.0)); + public static final float THICK_LINE = 10.0f; + public static final float THIN_LINE = 3.0f; - public static final RenderType BEAM_LINE_THICK = RenderType.create( - "beam_line_thick", - 1536, - RenderPipelines.LINES, - RenderType.CompositeState.builder() - .setLineState(THICK_LINE) - .setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING) - .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) - .createCompositeState(false) - ); - public static final RenderType BEAM_LINE_THIN = RenderType.create( + public static final RenderType BEAM_LINE = RenderType.create( "beam_line_thin", - 1536, - RenderPipelines.LINES, - RenderType.CompositeState.builder() - .setLineState(THIN_LINE) - .setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING) - .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) - .createCompositeState(false) + RenderSetup.builder(RenderPipelines.LINES) + .setLayeringTransform(LayeringTransform.VIEW_OFFSET_Z_LAYERING) + .setOutputTarget(OutputTarget.ITEM_ENTITY_TARGET) + .bufferSize(1536) + .createRenderSetup() ); public static final RenderType BLOCK_HILIGHT_FACE = RenderType.create( "block_hilight_face", - 256, - ModRenderPipelines.DEBUG_QUADS_NO_DEPTH, - RenderType.CompositeState.builder() - .setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING) - .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) - .createCompositeState(false) - ); + RenderSetup.builder(ModRenderPipelines.DEBUG_QUADS_NO_DEPTH) + .setLayeringTransform(LayeringTransform.VIEW_OFFSET_Z_LAYERING) + .setOutputTarget(OutputTarget.ITEM_ENTITY_TARGET) + .bufferSize(256) + .createRenderSetup() + ); public static final RenderType BLOCK_HILIGHT_LINE = RenderType.create( "block_hilight_line", - 256, - ModRenderPipelines.LINES_NO_DEPTH, - RenderType.CompositeState.builder() - .setLayeringState(RenderStateShard.VIEW_OFFSET_Z_LAYERING) - .setOutputState(RenderStateShard.ITEM_ENTITY_TARGET) - .createCompositeState(false) + RenderSetup.builder(ModRenderPipelines.LINES_NO_DEPTH) + .setLayeringTransform(LayeringTransform.VIEW_OFFSET_Z_LAYERING) + .setOutputTarget(OutputTarget.ITEM_ENTITY_TARGET) + .bufferSize(256) + .createRenderSetup() ); } diff --git a/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java b/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java index f7f5f2e5..0a5c4b7f 100644 --- a/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java +++ b/src/main/java/me/desht/modularrouters/client/render/area/ModuleTargetRenderer.java @@ -9,8 +9,10 @@ import net.minecraft.client.renderer.ShapeRenderer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.util.ARGB; import net.minecraft.world.item.ItemStack; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.neoforge.client.event.ClientTickEvent; import net.neoforged.neoforge.client.event.RenderLevelStageEvent; @@ -112,7 +114,8 @@ private static void render(MultiBufferSource.BufferSource buffer, PoseStack matr buffer.endBatch(ModRenderTypes.BLOCK_HILIGHT_FACE); VertexConsumer lineBuilder = buffer.getBuffer(ModRenderTypes.BLOCK_HILIGHT_LINE); - ShapeRenderer.renderLineBox(matrixStack, lineBuilder, 0, 0, 0, BOX_SIZE, BOX_SIZE, BOX_SIZE, 0.25f, 0.25f, 0.25f, 0.3125f); + // last float is the line width + ShapeRenderer.renderShape(matrixStack, lineBuilder, Shapes.block(), 0, 0, 0, ARGB.colorFromFloat(0.3125f, 0.25f, 0.25f, 0.25f), 3f); buffer.endBatch(ModRenderTypes.BLOCK_HILIGHT_LINE); diff --git a/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterBER.java b/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterBER.java index a3d4b0db..23df56d1 100644 --- a/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterBER.java +++ b/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterBER.java @@ -10,14 +10,18 @@ import me.desht.modularrouters.core.ModBlocks; import me.desht.modularrouters.util.BeamData; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.ShapeRenderer; +import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.feature.ModelFeatureRenderer; +import net.minecraft.client.renderer.item.ItemStackRenderState; +import net.minecraft.client.renderer.rendertype.RenderTypes; +import net.minecraft.client.renderer.state.CameraRenderState; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.ARGB; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; @@ -25,13 +29,22 @@ import net.minecraft.world.level.Level; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; +import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; import org.joml.Matrix4f; import org.joml.Vector3f; +import org.jspecify.annotations.Nullable; -public class ModularRouterBER implements BlockEntityRenderer { +import java.util.ArrayList; + +public class ModularRouterBER implements BlockEntityRenderer { private static final Vector3f ROTATION = new Vector3f(0.15f, 1.0f, 0f); private static final float CAMO_HIGHLIGHT_SIZE = 0.75f; + + private static final VoxelShape CAMO_HIGHLIGHT_SHAPE = Shapes.box( + 0, 0, 0, CAMO_HIGHLIGHT_SIZE, CAMO_HIGHLIGHT_SIZE, CAMO_HIGHLIGHT_SIZE + ); + private static final float[] COLS = new float[] { 0.5f, 0.5f, 1.0f, 0.25f }; @SuppressWarnings("unused") @@ -44,40 +57,67 @@ public AABB getRenderBoundingBox(ModularRouterBlockEntity blockEntity) { } @Override - public void render(ModularRouterBlockEntity te, float partialTicks, PoseStack matrixStack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn, Vec3 camera) { - matrixStack.pushPose(); - matrixStack.translate(0.5, 0.5, 0.5); + public ModularRouterRenderState createRenderState() { + return null; + } + + @Override + public void extractRenderState(ModularRouterBlockEntity blockEntity, ModularRouterRenderState renderState, float partialTick, Vec3 cameraPosition, ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress) { + BlockEntityRenderer.super.extractRenderState(blockEntity, renderState, partialTick, cameraPosition, breakProgress); + renderState.beams = blockEntity.beams.stream().map( + e -> new BeamData.WithProgress(e, e.getProgress(partialTick)) + ).toList(); + } - Vec3 routerVec = Vec3.atCenterOf(te.getBlockPos()); - for (BeamData beam: te.beams) { - matrixStack.pushPose(); - matrixStack.translate(-routerVec.x(), -routerVec.y(), -routerVec.z()); - Vec3 startPos = beam.getStart(routerVec); - Vec3 endPos = beam.getEnd(routerVec); - float progress = beam.getProgress(partialTicks); + @Override + public void submit(ModularRouterRenderState renderState, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) { + poseStack.pushPose(); + poseStack.translate(0.5, 0.5, 0.5); + + Vec3 routerVec = Vec3.atCenterOf(renderState.blockPos); + for (BeamData.WithProgress beam: renderState.beams) { + poseStack.pushPose(); + poseStack.translate(-routerVec.x(), -routerVec.y(), -routerVec.z()); + Vec3 startPos = beam.beam().getStart(routerVec); + Vec3 endPos = beam.beam().getEnd(routerVec); + float progress = beam.progress(); if (ConfigHolder.client.misc.renderFlyingItems.get()) { - renderFlyingItem(beam, matrixStack, buffer, progress, startPos, endPos); + renderFlyingItem(beam.beam(), poseStack, submitNodeCollector, progress, startPos, endPos); } - renderBeamLine(beam, matrixStack, buffer, progress, startPos, endPos); - matrixStack.popPose(); + renderBeamLine(beam.beam(), poseStack, submitNodeCollector, progress, startPos, endPos); + poseStack.popPose(); } - matrixStack.popPose(); + poseStack.popPose(); Player player = Minecraft.getInstance().player; if (ConfigHolder.client.misc.heldRouterShowsCamoRouters.get() && te.getCamouflage() != null && playerHoldingRouter(player) - && Vec3.atCenterOf(te.getBlockPos()).distanceToSqr(player.position()) < 256) { - renderCamoHighlight(matrixStack, buffer); + && Vec3.atCenterOf(renderState.blockPos).distanceToSqr(player.position()) < 256) { + renderCamoHighlight(poseStack, submitNodeCollector); } } - private void renderCamoHighlight(PoseStack poseStack, MultiBufferSource buffer) { + private void renderCamoHighlight(PoseStack poseStack, SubmitNodeCollector submitNodeCollector) { poseStack.pushPose(); double start = (1 - CAMO_HIGHLIGHT_SIZE) / 2.0; poseStack.translate(start, start, start); - addVertices(buffer.getBuffer(ModRenderTypes.BLOCK_HILIGHT_FACE), poseStack.last().pose()); - ShapeRenderer.renderLineBox(poseStack, buffer.getBuffer(RenderType.secondaryBlockOutline()), 0, 0, 0, CAMO_HIGHLIGHT_SIZE, CAMO_HIGHLIGHT_SIZE, CAMO_HIGHLIGHT_SIZE, 0.5F, 0.5F, 1.0F, 1.0F); + + submitNodeCollector.submitCustomGeometry(poseStack, ModRenderTypes.BLOCK_HILIGHT_FACE, (pose, buffer) -> { + addVertices(buffer, pose.pose()); + }); + + submitNodeCollector.submitCustomGeometry(poseStack, RenderTypes.secondaryBlockOutline(), (pose, buffer) -> { + ShapeRenderer.renderShape( + poseStack, + buffer, + CAMO_HIGHLIGHT_SHAPE, + 0, 0, 0, + ARGB.colorFromFloat(1.0F, 0.5F, 0.5F, 1.0F), + 3.0f // Line width + ); + }); + poseStack.popPose(); } @@ -118,7 +158,7 @@ private static boolean playerHoldingRouter(Player player) { return player.getMainHandItem().getItem() == router || player.getOffhandItem().getItem() == router; } - private void renderFlyingItem(BeamData beam, PoseStack matrixStack, MultiBufferSource buffer, float progress, Vec3 startPos, Vec3 endPos) { + private void renderFlyingItem(BeamData beam, PoseStack matrixStack, SubmitNodeCollector submitNodeCollector, float progress, Vec3 startPos, Vec3 endPos) { double ix = Mth.lerp(progress, startPos.x(), endPos.x()); double iy = Mth.lerp(progress, startPos.y(), endPos.y()); double iz = Mth.lerp(progress, startPos.z(), endPos.z()); @@ -136,13 +176,26 @@ private void renderFlyingItem(BeamData beam, PoseStack matrixStack, MultiBufferS world.addParticle(ParticleTypes.PORTAL, endPos.x(), endPos.y(), endPos.z(), 0.5 - world.random.nextDouble(), -0.5, 0.5 - world.random.nextDouble()); } } - Minecraft.getInstance().getItemRenderer() - .renderStatic(beam.stack(), ItemDisplayContext.GROUND, 0x00F000F0, OverlayTexture.NO_OVERLAY, matrixStack, buffer, world, 0); + + submitNodeCollector.submitItem( + matrixStack, + ItemDisplayContext.GROUND, + 0, + 0, + OverlayTexture.NO_OVERLAY, + new int[0], + new ArrayList<>(), + null, + ItemStackRenderState.FoilType.STANDARD + ); + +// Minecraft.getInstance().getItemRenderer() +// .renderStatic(beam.stack(), ItemDisplayContext.GROUND, 0x00F000F0, OverlayTexture.NO_OVERLAY, matrixStack, buffer, world, 0); matrixStack.popPose(); } } - private void renderBeamLine(BeamData beam, PoseStack matrixStack, MultiBufferSource buffer, float progress, Vec3 startPos, Vec3 endPos) { + private void renderBeamLine(BeamData beam, PoseStack matrixStack, SubmitNodeCollector submitNodeCollector, float progress, Vec3 startPos, Vec3 endPos) { int alpha = (int) (Mth.sin((Minecraft.getInstance().level.getGameTime() % 20) / 20f * 3.1415927f) * 128 + 32); int[] colors = beam.getRGB(); Matrix4f positionMatrix = matrixStack.last().pose(); @@ -151,21 +204,22 @@ private void renderBeamLine(BeamData beam, PoseStack matrixStack, MultiBufferSou float yn = (float) ((endPos.y - startPos.y) / len); float zn = (float) ((endPos.z - startPos.z) / len); - VertexConsumer builder = buffer.getBuffer(ModRenderTypes.BEAM_LINE_THICK); - ClientUtil.posF(builder, positionMatrix, startPos) - .setColor(colors[0], colors[1], colors[2], alpha) - .setNormal(matrixStack.last(), xn, yn, zn); - ClientUtil.posF(builder, positionMatrix, endPos) - .setColor(colors[0], colors[1], colors[2], alpha) - .setNormal(matrixStack.last(), xn, yn, zn); - - VertexConsumer builder2 = buffer.getBuffer(ModRenderTypes.BEAM_LINE_THIN); - ClientUtil.posF(builder2, positionMatrix, startPos) - .setColor(colors[0], colors[1], colors[2], 192) - .setNormal(matrixStack.last(), xn, yn, zn); - ClientUtil.posF(builder2, positionMatrix, endPos) - .setColor(colors[0], colors[1], colors[2], 192) - .setNormal(matrixStack.last(), xn, yn, zn); + submitNodeCollector.submitCustomGeometry(matrixStack, ModRenderTypes.BEAM_LINE, (pose, buffer) -> { + ClientUtil.posF(buffer, positionMatrix, startPos, ModRenderTypes.THICK_LINE) + .setColor(colors[0], colors[1], colors[2], alpha) + .setNormal(pose, xn, yn, zn); + ClientUtil.posF(buffer, positionMatrix, endPos, ModRenderTypes.THICK_LINE) + .setColor(colors[0], colors[1], colors[2], alpha) + .setNormal(pose, xn, yn, zn); + }); + + submitNodeCollector.submitCustomGeometry(matrixStack, ModRenderTypes.BEAM_LINE, (pose, buffer) -> { + ClientUtil.posF(buffer, positionMatrix, startPos, ModRenderTypes.THIN_LINE) + .setColor(colors[0], colors[1], colors[2], 192) + .setNormal(pose, xn, yn, zn); + ClientUtil.posF(buffer, positionMatrix, endPos, ModRenderTypes.THIN_LINE) + .setColor(colors[0], colors[1], colors[2], 192) + .setNormal(pose, xn, yn, zn); + }); } - } diff --git a/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterRenderState.java b/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterRenderState.java new file mode 100644 index 00000000..1f45756a --- /dev/null +++ b/src/main/java/me/desht/modularrouters/client/render/blockentity/ModularRouterRenderState.java @@ -0,0 +1,10 @@ +package me.desht.modularrouters.client.render.blockentity; + +import me.desht.modularrouters.util.BeamData; +import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; + +import java.util.List; + +public class ModularRouterRenderState extends BlockEntityRenderState { + public List beams; +} diff --git a/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java b/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java index dab09ecd..edecaaa8 100644 --- a/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java +++ b/src/main/java/me/desht/modularrouters/client/util/ClientUtil.java @@ -52,8 +52,8 @@ public static boolean isInvKey(int keyCode) { return keyCode == Minecraft.getInstance().options.keyInventory.getKey().getValue(); } - public static VertexConsumer posF(VertexConsumer builder, Matrix4f posMat, Vec3 vec) { - return builder.addVertex(posMat, (float)vec.x, (float)vec.y, (float)vec.z); + public static VertexConsumer posF(VertexConsumer builder, Matrix4f posMat, Vec3 vec, float lineWidth) { + return builder.addVertex(posMat, (float)vec.x, (float)vec.y, (float)vec.z).setLineWidth(lineWidth); } public static Slot getHoveredSlot() { diff --git a/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java b/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java index 249e18f6..badb96f9 100644 --- a/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java +++ b/src/main/java/me/desht/modularrouters/logic/filter/matchers/InspectionMatcher.java @@ -20,6 +20,10 @@ import net.neoforged.neoforge.energy.IEnergyStorage; import net.neoforged.neoforge.fluids.FluidUtil; import net.neoforged.neoforge.network.codec.NeoForgeStreamCodecs; +import net.neoforged.neoforge.transfer.ResourceHandler; +import net.neoforged.neoforge.transfer.access.ItemAccess; +import net.neoforged.neoforge.transfer.energy.EnergyHandler; +import net.neoforged.neoforge.transfer.fluid.FluidResource; import java.util.*; import java.util.function.BiPredicate; @@ -176,22 +180,24 @@ private static Optional getHighestEnchantLevel(ItemStack stack) { } private static Optional getEnergyPercent(ItemStack stack) { - IEnergyStorage storage = stack.getCapability(Capabilities.Energy.ITEM); - return storage == null ? Optional.empty() : Optional.of(asPercentage(storage.getEnergyStored(), storage.getMaxEnergyStored())); + EnergyHandler storage = stack.getCapability(Capabilities.Energy.ITEM, ItemAccess.forStack(stack)); + return storage == null ? Optional.empty() : Optional.of(asPercentage(storage.getAmountAsInt(), storage.getCapacityAsInt())); } private static Optional getFluidPercent(ItemStack stack) { - return FluidUtil.getFluidHandler(stack) - .map(handler -> { - int total = 0; - int max = 0; - for (int idx = 0; idx < handler.getTanks(); idx++) { - max += handler.getTankCapacity(idx); - total += handler.getFluidInTank(idx).getAmount(); - } - return Optional.of(asPercentage(total, max)); - }) - .orElse(Optional.empty()); + ResourceHandler capability = stack.getCapability(Capabilities.Fluid.ITEM, ItemAccess.forStack(stack)); + if (capability == null) { + return Optional.empty(); + } + + int total = 0; + int max = 0; + for (int idx = 0; idx < capability.size(); idx++) { + max += capability.getCapacityAsInt(idx, capability.getResource(idx)); + total += capability.getAmountAsInt(idx); + } + + return Optional.of(asPercentage(total, max)); } public InspectionSubject cycle(int direction) { diff --git a/src/main/java/me/desht/modularrouters/util/BeamData.java b/src/main/java/me/desht/modularrouters/util/BeamData.java index e9f93257..7ed59699 100644 --- a/src/main/java/me/desht/modularrouters/util/BeamData.java +++ b/src/main/java/me/desht/modularrouters/util/BeamData.java @@ -184,4 +184,7 @@ public BeamData build() { return new BeamData(offset, duration, color, stack, fade, reversed); } } + + public record WithProgress(BeamData beam, float progress) { + } }