diff --git a/.gitignore b/.gitignore index d46346a..32923bc 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ /bin/ /run/ /logs +/runs *.classpath *.project @@ -20,4 +21,4 @@ *.launch .settings/org.eclipse.jdt.core.prefs *.prefs -.cache \ No newline at end of file +.cache diff --git a/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java b/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java index 5a62572..26430f2 100644 --- a/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java +++ b/src/main/java/de/ellpeck/prettypipes/PrettyPipes.java @@ -1,18 +1,10 @@ package de.ellpeck.prettypipes; -import net.neoforged.api.distmarker.Dist; -import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.loading.FMLEnvironment; @Mod(PrettyPipes.ID) public final class PrettyPipes { public static final String ID = "prettypipes"; - public PrettyPipes(IEventBus eventBus) { - if (FMLEnvironment.dist == Dist.CLIENT) - eventBus.addListener(Registry.Client::setup); - } - } diff --git a/src/main/java/de/ellpeck/prettypipes/Registry.java b/src/main/java/de/ellpeck/prettypipes/Registry.java index 291cb00..572204c 100644 --- a/src/main/java/de/ellpeck/prettypipes/Registry.java +++ b/src/main/java/de/ellpeck/prettypipes/Registry.java @@ -5,6 +5,7 @@ import de.ellpeck.prettypipes.entities.PipeFrameRenderer; import de.ellpeck.prettypipes.items.*; import de.ellpeck.prettypipes.misc.ItemEquality; import de.ellpeck.prettypipes.misc.ModuleClearingRecipe; +import de.ellpeck.prettypipes.packets.*; import de.ellpeck.prettypipes.pipe.IPipeConnectable; import de.ellpeck.prettypipes.pipe.PipeBlock; import de.ellpeck.prettypipes.pipe.PipeBlockEntity; @@ -65,18 +66,23 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; +import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.fml.common.Mod; +import net.neoforged.fml.common.Mod.EventBusSubscriber; +import net.neoforged.fml.common.Mod.EventBusSubscriber.Bus; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.capabilities.BlockCapability; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; +import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; import net.neoforged.neoforge.registries.RegisterEvent; import java.util.Comparator; import java.util.Locale; import java.util.function.BiFunction; -@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(bus = Bus.MOD) public final class Registry { public static BlockCapability pipeConnectableCapability = BlockCapability.createSided(new ResourceLocation(PrettyPipes.ID, "pipe_connectable"), IPipeConnectable.class); @@ -190,6 +196,27 @@ public final class Registry { }); } + @SubscribeEvent + public static void registerCapabilities(RegisterCapabilitiesEvent event) { + event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.pipeBlockEntity, (e, d) -> e); + event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.pressurizerBlockEntity, (e, d) -> e); + event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.itemTerminalBlockEntity, (e, d) -> e); + event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.craftingTerminalBlockEntity, (e, d) -> e); + + event.registerBlockEntity(Capabilities.EnergyStorage.BLOCK, Registry.pressurizerBlockEntity, (e, d) -> e.storage); + } + + @SubscribeEvent + public static void registerPayloads(final RegisterPayloadHandlerEvent event) { + var registrar = event.registrar(PrettyPipes.ID); + registrar.play(PacketItemEnterPipe.ID, PacketItemEnterPipe::new, PacketItemEnterPipe::onMessage); + registrar.play(PacketButton.ID, PacketButton::new, PacketButton::onMessage); + registrar.play(PacketCraftingModuleTransfer.ID, PacketCraftingModuleTransfer::new, PacketCraftingModuleTransfer::onMessage); + registrar.play(PacketGhostSlot.ID, PacketGhostSlot::new, PacketGhostSlot::onMessage); + registrar.play(PacketNetworkItems.ID, PacketNetworkItems::new, PacketNetworkItems::onMessage); + registrar.play(PacketRequest.ID, PacketRequest::new, PacketRequest::onMessage); + } + private static > MenuType registerPipeContainer(RegisterEvent.RegisterHelper> helper, String name) { var type = (MenuType) IMenuTypeExtension.create((windowId, inv, data) -> { var tile = Utility.getBlockEntity(PipeBlockEntity.class, inv.player.level(), data.readBlockPos()); @@ -206,8 +233,10 @@ public final class Registry { helper.register(new ResourceLocation(PrettyPipes.ID, tier.name().toLowerCase(Locale.ROOT) + "_" + name), item.apply(name, tier)); } + @EventBusSubscriber(bus = Bus.MOD, value = Dist.CLIENT) public static final class Client { + @SubscribeEvent public static void setup(FMLClientSetupEvent event) { BlockEntityRenderers.register(Registry.pipeBlockEntity, PipeRenderer::new); EntityRenderers.register(Registry.pipeFrameEntity, PipeFrameRenderer::new); diff --git a/src/main/java/de/ellpeck/prettypipes/misc/Events.java b/src/main/java/de/ellpeck/prettypipes/misc/Events.java index c6fe570..9c2fd7f 100644 --- a/src/main/java/de/ellpeck/prettypipes/misc/Events.java +++ b/src/main/java/de/ellpeck/prettypipes/misc/Events.java @@ -1,17 +1,12 @@ package de.ellpeck.prettypipes.misc; import de.ellpeck.prettypipes.PrettyPipes; -import de.ellpeck.prettypipes.Registry; import de.ellpeck.prettypipes.network.PipeNetwork; -import de.ellpeck.prettypipes.packets.*; import net.minecraft.commands.Commands; import net.minecraft.network.chat.Component; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.Mod; -import net.neoforged.neoforge.capabilities.Capabilities; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; import net.neoforged.neoforge.event.server.ServerStartingEvent; -import net.neoforged.neoforge.network.event.RegisterPayloadHandlerEvent; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -21,16 +16,6 @@ import java.nio.file.Paths; @Mod.EventBusSubscriber public final class Events { - @SubscribeEvent - public static void onWorldCaps(RegisterCapabilitiesEvent event) { - event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.pipeBlockEntity, (e, d) -> e); - event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.pressurizerBlockEntity, (e, d) -> e); - event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.itemTerminalBlockEntity, (e, d) -> e); - event.registerBlockEntity(Registry.pipeConnectableCapability, Registry.craftingTerminalBlockEntity, (e, d) -> e); - - event.registerBlockEntity(Capabilities.EnergyStorage.BLOCK, Registry.pressurizerBlockEntity, (e, d) -> e.storage); - } - @SubscribeEvent public static void onServerStarting(ServerStartingEvent event) { event.getServer().getCommands().getDispatcher().register(Commands.literal(PrettyPipes.ID).requires(s -> s.hasPermission(2)) @@ -61,15 +46,4 @@ public final class Events { }))); } - @SubscribeEvent - public static void onPayloadRegister(final RegisterPayloadHandlerEvent event) { - var registrar = event.registrar(PrettyPipes.ID); - registrar.play(PacketItemEnterPipe.ID, PacketItemEnterPipe::new, PacketItemEnterPipe::onMessage); - registrar.play(PacketButton.ID, PacketButton::new, PacketButton::onMessage); - registrar.play(PacketCraftingModuleTransfer.ID, PacketCraftingModuleTransfer::new, PacketCraftingModuleTransfer::onMessage); - registrar.play(PacketGhostSlot.ID, PacketGhostSlot::new, PacketGhostSlot::onMessage); - registrar.play(PacketNetworkItems.ID, PacketNetworkItems::new, PacketNetworkItems::onMessage); - registrar.play(PacketRequest.ID, PacketRequest::new, PacketRequest::onMessage); - } - } diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 3e08fd8..16cf0a1 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -4,22 +4,22 @@ # Note that there are a couple of TOML lists in this file. # Find more information on toml format here: https://github.com/toml-lang/toml # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml -modLoader="javafml" #mandatory -# A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="${loader_version_range}" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +modLoader = "javafml" #mandatory +# A version range to match for said mod loader - for regular FML @Mod it will be the the FML version. This is currently 47. +loaderVersion = "${loader_version_range}" #mandatory # The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. -license="${mod_license}" +license = "${mod_license}" # A URL to refer people to when problems occur with this mod #issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod -modId="${mod_id}" #mandatory +modId = "${mod_id}" #mandatory # The version number of the mod -version="${mod_version}" #mandatory +version = "${mod_version}" #mandatory # A display name for the mod -displayName="${mod_name}" #mandatory +displayName = "${mod_name}" #mandatory # A URL to query for updates for this mod. See the JSON update specification https://docs.minecraftforge.net/en/latest/misc/updatechecker/ #updateJSONURL="https://change.me.example.invalid/updates.json" #optional # A URL for the "homepage" for this mod, displayed in the mod UI @@ -29,7 +29,7 @@ displayName="${mod_name}" #mandatory # A text field displayed in the mod UI #credits="" #optional # A text field displayed in the mod UI -authors="${mod_authors}" #optional +authors = "${mod_authors}" #optional # Display Test controls the display for your mod in the server connection screen # MATCH_VERSION means that your mod will cause a red X if the versions on client and server differ. This is the default behaviour and should be what you choose if you have server and client elements to your mod. # IGNORE_SERVER_VERSION means that your mod will not cause a red X if it's present on the server but not on the client. This is what you should use if you're a server only mod. @@ -39,29 +39,33 @@ authors="${mod_authors}" #optional #displayTest="MATCH_VERSION" # MATCH_VERSION is the default if nothing is specified (#optional) # The description text for the mod (multi line!) (#mandatory) -description='''${mod_description}''' +description = '''${mod_description}''' # A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. -[[dependencies.${mod_id}]] #optional +[[dependencies.${ mod_id }]] #optional # the modid of the dependency -modId="forge" #mandatory -# Does this dependency have to exist - if not, ordering below must be specified -mandatory=true #mandatory +modId = "neoforge" #mandatory +# The type of the dependency. Can be one of "required", "optional", "incompatible" or "discouraged" (case insensitive). +# 'required' requires the mod to exist, 'optional' does not +# 'incompatible' will prevent the game from loading when the mod exists, and 'discouraged' will show a warning +type = "required" #mandatory +# Optional field describing why the dependency is required or why it is incompatible +# reason="..." # The version range of the dependency -versionRange="${forge_version_range}" #mandatory -# An ordering relationship for the dependency - BEFORE or AFTER required if the dependency is not mandatory +versionRange = "${neo_version_range}" #mandatory +# An ordering relationship for the dependency. # BEFORE - This mod is loaded BEFORE the dependency # AFTER - This mod is loaded AFTER the dependency -ordering="NONE" +ordering = "NONE" # Side this dependency is applied on - BOTH, CLIENT, or SERVER -side="BOTH" +side = "BOTH" # Here's another dependency -[[dependencies.${mod_id}]] -modId="minecraft" -mandatory=true +[[dependencies.${ mod_id }]] +modId = "minecraft" +type = "required" # This version range declares a minimum of the current minecraft version up to but not including the next major version -versionRange="${minecraft_version_range}" -ordering="NONE" -side="BOTH" +versionRange = "${minecraft_version_range}" +ordering = "NONE" +side = "BOTH" # Features are specific properties of the game environment, that you may want to declare you require. This example declares # that your mod requires GL version 3.2 or higher. Other features will be added. They are side aware so declaring this won't