diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cda5bba..3ad5cd1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -40,5 +40,5 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: immersive-wiring + name: immersive-energistics path: build/libs/ diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 1cfcf24..05d00a7 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -24,19 +24,19 @@ jobs: - name: Generate data run: ./gradlew runData --max-workers 1 env: - IW_VERSION: ${{ github.event.release.tag_name }} + MOD_VERSION: ${{ github.event.release.tag_name }} - name: Build run: ./gradlew build --max-workers 1 env: - IW_VERSION: ${{ github.event.release.tag_name }} + MOD_VERSION: ${{ github.event.release.tag_name }} - name: Upload Release Artifact uses: softprops/action-gh-release@v1 with: - files: build/libs/Immersive-Wiring-${{ github.event.release.tag_name }}.jar + files: build/libs/Immersive-Energistics-${{ github.event.release.tag_name }}.jar tag_name: ${{ github.event.release.tag_name }} - name: Upload to external sites run: ./gradlew curseforge modrinth --max-workers 1 env: - IW_VERSION: ${{ github.event.release.tag_name }} + MOD_VERSION: ${{ github.event.release.tag_name }} CURSEFORGE: ${{ secrets.CURSEFORGE }} MODRINTH: ${{ secrets.MODRINTH }} diff --git a/build.gradle b/build.gradle index a8b00b9..72bec27 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group = "me.ramidzkh" -version = System.getenv("IW_VERSION") ?: "0.0.0" +version = System.getenv("MOD_VERSION") ?: "0.0.0" repositories { maven { @@ -120,7 +120,7 @@ runs { } data { - programArguments.addAll "--mod", "immersivewiring", "--all", "--output", file("src/generated/resources/").getAbsolutePath(), "--existing", file("src/main/resources/").getAbsolutePath() + programArguments.addAll "--mod", "immeng", "--all", "--output", file("src/generated/resources/").getAbsolutePath(), "--existing", file("src/main/resources/").getAbsolutePath() } } @@ -175,9 +175,9 @@ System.getenv("CURSEFORGE")?.with { String key -> apiKey = key project { - id = "574300" // TODO + id = "992377" changelogType = "markdown" - changelog = "View changelog at [the release page](https://github.com/AppliedEnergistics/Applied-Mekanistics/releases/tag/${version})" + changelog = "View changelog at [the release page](https://github.com/AppliedEnergistics/Immersive-Energistics/releases/tag/${version})" if (version.contains("alpha")) { releaseType = "alpha" @@ -206,8 +206,8 @@ System.getenv("CURSEFORGE")?.with { String key -> // Modrinth modrinth { token.set(System.getenv("MODRINTH")) - projectId.set("applied-mekanistics") // TODO - changelog.set("View changelog at [the release page](https://github.com/AppliedEnergistics/Applied-Mekanistics/releases/tag/${version})") + projectId.set("immersive-energistics") + changelog.set("View changelog at [the release page](https://github.com/AppliedEnergistics/Immersive-Energistics/releases/tag/${version})") versionNumber.set(project.version) if (version.contains("alpha")) { diff --git a/images/setup1.png b/images/setup1.png new file mode 100644 index 0000000..ee2f49d Binary files /dev/null and b/images/setup1.png differ diff --git a/images/setup1_network.png b/images/setup1_network.png new file mode 100644 index 0000000..523c674 Binary files /dev/null and b/images/setup1_network.png differ diff --git a/settings.gradle b/settings.gradle index a8679e6..af31542 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,4 +6,4 @@ pluginManagement { } } -rootProject.name = "Immersive-Wiring" +rootProject.name = "Immersive-Energistics" diff --git a/src/main/java/dev/technici4n/immeng/ImmEng.java b/src/main/java/dev/technici4n/immeng/ImmEng.java new file mode 100644 index 0000000..580a3c8 --- /dev/null +++ b/src/main/java/dev/technici4n/immeng/ImmEng.java @@ -0,0 +1,115 @@ +package dev.technici4n.immeng; + +import java.util.List; +import java.util.Set; + +import org.jetbrains.annotations.Nullable; + +import net.minecraft.core.Direction; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.Mod; +import net.neoforged.neoforge.capabilities.BlockCapability; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; +import net.neoforged.neoforge.data.event.GatherDataEvent; +import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; +import net.neoforged.neoforge.registries.DeferredBlock; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredItem; +import net.neoforged.neoforge.registries.DeferredRegister; + +import blusunrize.immersiveengineering.api.wires.WireApi; +import blusunrize.immersiveengineering.common.blocks.BlockItemIE; +import blusunrize.immersiveengineering.common.items.WireCoilItem; +import dev.technici4n.immeng.data.ImmEngBlockLoot; +import dev.technici4n.immeng.data.ImmEngBlockTags; +import dev.technici4n.immeng.data.ImmEngRecipes; +import dev.technici4n.immeng.data.ImmEngStatesProvider; + +import appeng.api.ids.AEConstants; +import appeng.api.ids.AECreativeTabIds; +import appeng.api.networking.IInWorldGridNodeHost; + +@Mod(ImmEng.ID) +public class ImmEng { + public static final String ID = "immeng"; + + public static ResourceLocation id(String path) { + return new ResourceLocation(ID, path); + } + + public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(ID); + public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(ID); + public static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister + .create(Registries.BLOCK_ENTITY_TYPE, ID); + + @SuppressWarnings({ "Convert2MethodRef", "FunctionalExpressionCanBeFolded" }) + public static final DeferredBlock> ME_CONNECTOR = BLOCKS + .register("connector_me", () -> new MEConnectorBlock<>(() -> ImmEng.ME_CONNECTOR_BE.get())); + @SuppressWarnings({ "Convert2MethodRef", "FunctionalExpressionCanBeFolded" }) + public static final DeferredBlock> ME_RELAY = BLOCKS + .register("connector_me_relay", () -> new MEConnectorBlock<>(() -> ImmEng.ME_RELAY_BE.get())); + + public static final DeferredItem ME_CONNECTOR_ITEM = ITEMS.register("connector_me", + () -> new BlockItemIE(ME_CONNECTOR.get())); + public static final DeferredItem ME_RELAY_ITEM = ITEMS.register("connector_me_relay", + () -> new BlockItemIE(ME_RELAY.get())); + + public static final DeferredItem ME_WIRE_COIL = ITEMS.register("wirecoil_me", + () -> new WireCoilItem(MEWireType.NORMAL)); + public static final DeferredItem ME_WIRE_DENSE_COIL = ITEMS.register("wirecoil_me_dense", + () -> new WireCoilItem(MEWireType.DENSE)); + + public static final DeferredHolder, BlockEntityType> ME_CONNECTOR_BE = BLOCK_ENTITY_TYPES + .register("connector_me", + () -> BlockEntityType.Builder.of(MEConnectorBlockEntity::new, ME_CONNECTOR.get()).build(null)); + public static final DeferredHolder, BlockEntityType> ME_RELAY_BE = BLOCK_ENTITY_TYPES + .register("connector_me_relay", + () -> BlockEntityType.Builder.of(MEConnectorBlockEntity::new, ME_RELAY.get()).build(null)); + + public static final BlockCapability IN_WORLD_GRID_NODE_HOST = BlockCapability + .createSided(new ResourceLocation(AEConstants.MOD_ID, "inworld_gridnode_host"), IInWorldGridNodeHost.class); + + public ImmEng(IEventBus modEventBus) { + BLOCKS.register(modEventBus); + ITEMS.register(modEventBus); + BLOCK_ENTITY_TYPES.register(modEventBus); + + WireApi.registerWireType(MEWireType.NORMAL); + WireApi.registerWireType(MEWireType.DENSE); + MELocalHandler.register(MELocalHandler.ID, MELocalHandler::new); + + modEventBus.addListener(ImmEng::initDatagen); + + modEventBus.addListener((RegisterCapabilitiesEvent event) -> { + event.registerBlockEntity(IN_WORLD_GRID_NODE_HOST, ME_CONNECTOR_BE.get(), (be, side) -> be); + }); + + modEventBus.addListener((BuildCreativeModeTabContentsEvent event) -> { + if (event.getTabKey() == AECreativeTabIds.MAIN) { + event.accept(ME_WIRE_COIL); + event.accept(ME_WIRE_DENSE_COIL); + event.accept(ME_CONNECTOR_ITEM); + event.accept(ME_RELAY_ITEM); + } + }); + } + + private static void initDatagen(GatherDataEvent event) { + var gen = event.getGenerator(); + + gen.addProvider(event.includeClient(), + new ImmEngStatesProvider(gen.getPackOutput(), event.getExistingFileHelper())); + + gen.addProvider(event.includeServer(), new LootTableProvider(gen.getPackOutput(), Set.of(), List.of( + new LootTableProvider.SubProviderEntry(ImmEngBlockLoot::new, LootContextParamSets.BLOCK)))); + gen.addProvider(event.includeServer(), new ImmEngRecipes(gen.getPackOutput())); + gen.addProvider(event.includeServer(), + new ImmEngBlockTags(gen.getPackOutput(), event.getLookupProvider(), event.getExistingFileHelper())); + } +} diff --git a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEConnectorBlock.java b/src/main/java/dev/technici4n/immeng/MEConnectorBlock.java similarity index 97% rename from src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEConnectorBlock.java rename to src/main/java/dev/technici4n/immeng/MEConnectorBlock.java index da2c6a2..d190003 100644 --- a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEConnectorBlock.java +++ b/src/main/java/dev/technici4n/immeng/MEConnectorBlock.java @@ -1,4 +1,4 @@ -package dev.technici4n.immersivewiring.modules.ae2; +package dev.technici4n.immeng; import java.util.function.Supplier; diff --git a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEConnectorBlockEntity.java b/src/main/java/dev/technici4n/immeng/MEConnectorBlockEntity.java similarity index 95% rename from src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEConnectorBlockEntity.java rename to src/main/java/dev/technici4n/immeng/MEConnectorBlockEntity.java index 426fb77..13b8da9 100644 --- a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEConnectorBlockEntity.java +++ b/src/main/java/dev/technici4n/immeng/MEConnectorBlockEntity.java @@ -1,4 +1,4 @@ -package dev.technici4n.immersivewiring.modules.ae2; +package dev.technici4n.immeng; import java.util.Collection; import java.util.HashSet; @@ -67,13 +67,13 @@ IManagedGridNode createWireNode() { } public MEConnectorBlockEntity(BlockPos pos, BlockState state) { - super(state.is(AEModule.ME_RELAY) ? AEModule.ME_RELAY_BE.get() : AEModule.ME_CONNECTOR_BE.get(), pos, state); - this.relay = state.is(AEModule.ME_RELAY); + super(state.is(ImmEng.ME_RELAY) ? ImmEng.ME_RELAY_BE.get() : ImmEng.ME_CONNECTOR_BE.get(), pos, state); + this.relay = state.is(ImmEng.ME_RELAY); if (this.relay) { - gridNode.setVisualRepresentation(AEModule.ME_RELAY_ITEM); + gridNode.setVisualRepresentation(ImmEng.ME_RELAY_ITEM); } else { - gridNode.setVisualRepresentation(AEModule.ME_CONNECTOR_ITEM); + gridNode.setVisualRepresentation(ImmEng.ME_CONNECTOR_ITEM); gridNode.setInWorldNode(true); } @@ -181,10 +181,10 @@ void loadConnectionOnA(Connection connection, LocalWireNetwork localNet) { // Update flags and active item based on wire if (connection.type == MEWireType.DENSE) { wireNode.setFlags(GridFlags.DENSE_CAPACITY); - wireNode.setVisualRepresentation(AEModule.ME_WIRE_DENSE_COIL); + wireNode.setVisualRepresentation(ImmEng.ME_WIRE_DENSE_COIL); } else { wireNode.setFlags(GridFlags.PREFERRED); - wireNode.setVisualRepresentation(AEModule.ME_WIRE_COIL); + wireNode.setVisualRepresentation(ImmEng.ME_WIRE_COIL); } wireNode.create(getLevelNonnull(), null); diff --git a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MELocalHandler.java b/src/main/java/dev/technici4n/immeng/MELocalHandler.java similarity index 92% rename from src/main/java/dev/technici4n/immersivewiring/modules/ae2/MELocalHandler.java rename to src/main/java/dev/technici4n/immeng/MELocalHandler.java index 9614ded..0470582 100644 --- a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MELocalHandler.java +++ b/src/main/java/dev/technici4n/immeng/MELocalHandler.java @@ -1,4 +1,4 @@ -package dev.technici4n.immersivewiring.modules.ae2; +package dev.technici4n.immeng; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -9,10 +9,9 @@ import blusunrize.immersiveengineering.api.wires.IImmersiveConnectable; import blusunrize.immersiveengineering.api.wires.LocalWireNetwork; import blusunrize.immersiveengineering.api.wires.localhandlers.LocalNetworkHandler; -import dev.technici4n.immersivewiring.ImmersiveWiring; public class MELocalHandler extends LocalNetworkHandler { - public static final ResourceLocation ID = ImmersiveWiring.id("me"); + public static final ResourceLocation ID = ImmEng.id("me"); protected MELocalHandler(LocalWireNetwork net, GlobalWireNetwork global) { super(net, global); diff --git a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEWireType.java b/src/main/java/dev/technici4n/immeng/MEWireType.java similarity index 84% rename from src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEWireType.java rename to src/main/java/dev/technici4n/immeng/MEWireType.java index 4ed1310..80f4ec6 100644 --- a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/MEWireType.java +++ b/src/main/java/dev/technici4n/immeng/MEWireType.java @@ -1,4 +1,4 @@ -package dev.technici4n.immersivewiring.modules.ae2; +package dev.technici4n.immeng; import org.jetbrains.annotations.NotNull; @@ -17,10 +17,6 @@ public MEWireType(boolean dense) { this.dense = dense; } - public boolean isDense() { - return dense; - } - @Override public String getUniqueName() { return dense ? "me_dense" : "me"; @@ -43,7 +39,7 @@ public int getMaxLength() { @Override public ItemStack getWireCoil(Connection connection) { - return dense ? AEModule.ME_WIRE_DENSE_COIL.toStack() : AEModule.ME_WIRE_COIL.toStack(); + return dense ? ImmEng.ME_WIRE_DENSE_COIL.toStack() : ImmEng.ME_WIRE_COIL.toStack(); } @Override diff --git a/src/main/java/dev/technici4n/immersivewiring/data/IWBlockStatesProvider.java b/src/main/java/dev/technici4n/immeng/data/ExtendedBlockStatesProvider.java similarity index 80% rename from src/main/java/dev/technici4n/immersivewiring/data/IWBlockStatesProvider.java rename to src/main/java/dev/technici4n/immeng/data/ExtendedBlockStatesProvider.java index 57ee025..c634f64 100644 --- a/src/main/java/dev/technici4n/immersivewiring/data/IWBlockStatesProvider.java +++ b/src/main/java/dev/technici4n/immeng/data/ExtendedBlockStatesProvider.java @@ -1,4 +1,4 @@ -package dev.technici4n.immersivewiring.data; +package dev.technici4n.immeng.data; import java.util.List; import java.util.function.Consumer; @@ -16,19 +16,11 @@ import net.neoforged.neoforge.common.data.ExistingFileHelper; import blusunrize.immersiveengineering.api.IEProperties; -import dev.technici4n.immersivewiring.ImmersiveWiring; +import dev.technici4n.immeng.ImmEng; -public abstract class IWBlockStatesProvider extends BlockStateProvider { - private final String module; - - public IWBlockStatesProvider(PackOutput output, ExistingFileHelper exFileHelper, String module) { - super(output, ImmersiveWiring.ID, exFileHelper); - this.module = module; - } - - @Override - public final String getName() { - return super.getName() + " (" + module + ")"; +public abstract class ExtendedBlockStatesProvider extends BlockStateProvider { + public ExtendedBlockStatesProvider(PackOutput output, ExistingFileHelper exFileHelper) { + super(output, ImmEng.ID, exFileHelper); } // Mostly copy-pasted from IE @@ -41,11 +33,6 @@ protected void createAllRotatedBlock(Supplier block, createRotatedBlock(block, model, IEProperties.FACING_ALL, additionalProps, 90, 0); } - protected void createRotatedBlock(Supplier block, ModelFile model, Property facing, - List> additionalProps, int offsetRotX, int offsetRotY) { - createRotatedBlock(block, $ -> model, facing, additionalProps, offsetRotX, offsetRotY); - } - protected void createRotatedBlock(Supplier block, Function model, Property facing, List> additionalProps, int offsetRotX, int offsetRotY) { diff --git a/src/main/java/dev/technici4n/immeng/data/ImmEngBlockLoot.java b/src/main/java/dev/technici4n/immeng/data/ImmEngBlockLoot.java new file mode 100644 index 0000000..905102e --- /dev/null +++ b/src/main/java/dev/technici4n/immeng/data/ImmEngBlockLoot.java @@ -0,0 +1,30 @@ +package dev.technici4n.immeng.data; + +import java.util.Set; + +import com.google.common.collect.Iterables; + +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.block.Block; +import net.neoforged.neoforge.registries.DeferredHolder; + +import dev.technici4n.immeng.ImmEng; + +public class ImmEngBlockLoot extends BlockLootSubProvider { + public ImmEngBlockLoot() { + super(Set.of(), FeatureFlags.VANILLA_SET); + } + + @Override + protected void generate() { + for (var block : getKnownBlocks()) { + dropSelf(block); + } + } + + @Override + protected Iterable getKnownBlocks() { + return Iterables.transform(ImmEng.BLOCKS.getEntries(), DeferredHolder::get); + } +} diff --git a/src/main/java/dev/technici4n/immeng/data/ImmEngBlockTags.java b/src/main/java/dev/technici4n/immeng/data/ImmEngBlockTags.java new file mode 100644 index 0000000..5e05695 --- /dev/null +++ b/src/main/java/dev/technici4n/immeng/data/ImmEngBlockTags.java @@ -0,0 +1,23 @@ +package dev.technici4n.immeng.data; + +import java.util.concurrent.CompletableFuture; + +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.BlockTags; +import net.neoforged.neoforge.common.data.BlockTagsProvider; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +import dev.technici4n.immeng.ImmEng; + +public class ImmEngBlockTags extends BlockTagsProvider { + public ImmEngBlockTags(PackOutput packOutput, CompletableFuture registries, + ExistingFileHelper existingFileHelper) { + super(packOutput, registries, ImmEng.ID, existingFileHelper); + } + + @Override + protected void addTags(HolderLookup.Provider registries) { + tag(BlockTags.MINEABLE_WITH_PICKAXE).add(ImmEng.ME_CONNECTOR.get(), ImmEng.ME_RELAY.get()); + } +} diff --git a/src/main/java/dev/technici4n/immeng/data/ImmEngRecipes.java b/src/main/java/dev/technici4n/immeng/data/ImmEngRecipes.java new file mode 100644 index 0000000..b4dcc03 --- /dev/null +++ b/src/main/java/dev/technici4n/immeng/data/ImmEngRecipes.java @@ -0,0 +1,58 @@ +package dev.technici4n.immeng.data; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.data.PackOutput; +import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.RecipeOutput; +import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.neoforged.neoforge.common.Tags; +import net.neoforged.neoforge.common.conditions.IConditionBuilder; + +import dev.technici4n.immeng.ImmEng; + +import appeng.api.ids.AEBlockIds; +import appeng.api.ids.AEItemIds; +import appeng.api.ids.AEPartIds; + +public class ImmEngRecipes extends RecipeProvider implements IConditionBuilder { + public ImmEngRecipes(PackOutput packOutput) { + super(packOutput); + } + + @Override + protected void buildRecipes(RecipeOutput output) { + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ImmEng.ME_CONNECTOR, 4) + .pattern(" f ") + .pattern("FfF") + .pattern("FfF") + .define('f', BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL)) + .define('F', BuiltInRegistries.ITEM.get(AEBlockIds.FLUIX_BLOCK)) + .unlockedBy("has_fluix", has(BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL))) + .save(output, ImmEng.id("connector_me")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ImmEng.ME_RELAY, 8) + .pattern(" f ") + .pattern("FfF") + .define('f', BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL)) + .define('F', BuiltInRegistries.ITEM.get(AEBlockIds.FLUIX_BLOCK)) + .unlockedBy("has_fluix", has(BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL))) + .save(output, ImmEng.id("connector_me_relay")); + + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ImmEng.ME_WIRE_COIL, 4) + .pattern(" c ") + .pattern("csc") + .pattern(" c ") + .define('c', BuiltInRegistries.ITEM.get(AEPartIds.CABLE_GLASS_TRANSPARENT)) + .define('s', Tags.Items.RODS_WOODEN) + .unlockedBy("has_cable", has(BuiltInRegistries.ITEM.get(AEPartIds.CABLE_GLASS_TRANSPARENT))) + .save(output, ImmEng.id("wirecoil_me")); + ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ImmEng.ME_WIRE_DENSE_COIL, 4) + .pattern(" c ") + .pattern("csc") + .pattern(" c ") + .define('c', BuiltInRegistries.ITEM.get(AEPartIds.CABLE_DENSE_COVERED_TRANSPARENT)) + .define('s', Tags.Items.RODS_WOODEN) + .unlockedBy("has_cable", has(BuiltInRegistries.ITEM.get(AEPartIds.CABLE_DENSE_COVERED_TRANSPARENT))) + .save(output, ImmEng.id("wirecoil_me_dense")); + } +} diff --git a/src/main/java/dev/technici4n/immeng/data/ImmEngStatesProvider.java b/src/main/java/dev/technici4n/immeng/data/ImmEngStatesProvider.java new file mode 100644 index 0000000..e7c69c1 --- /dev/null +++ b/src/main/java/dev/technici4n/immeng/data/ImmEngStatesProvider.java @@ -0,0 +1,23 @@ +package dev.technici4n.immeng.data; + +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.ExistingFileHelper; + +import dev.technici4n.immeng.ImmEng; + +public class ImmEngStatesProvider extends ExtendedBlockStatesProvider { + public ImmEngStatesProvider(PackOutput output, ExistingFileHelper exFileHelper) { + super(output, exFileHelper); + } + + @Override + protected void registerStatesAndModels() { + createAllRotatedBlock(ImmEng.ME_CONNECTOR, + models().getExistingFile(ImmEng.id("block/connector_me"))); + createAllRotatedBlock(ImmEng.ME_RELAY, + models().getExistingFile(ImmEng.id("block/connector_me_relay"))); + + itemModels().basicItem(ImmEng.ME_WIRE_COIL.asItem()); + itemModels().basicItem(ImmEng.ME_WIRE_DENSE_COIL.asItem()); + } +} diff --git a/src/main/java/dev/technici4n/immersivewiring/ImmersiveWiring.java b/src/main/java/dev/technici4n/immersivewiring/ImmersiveWiring.java deleted file mode 100644 index 8fceb53..0000000 --- a/src/main/java/dev/technici4n/immersivewiring/ImmersiveWiring.java +++ /dev/null @@ -1,35 +0,0 @@ -package dev.technici4n.immersivewiring; - -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.fml.ModList; -import net.neoforged.fml.common.Mod; -import net.neoforged.neoforge.registries.DeferredRegister; - -import dev.technici4n.immersivewiring.modules.ae2.AEModule; - -@Mod(ImmersiveWiring.ID) -public class ImmersiveWiring { - public static final String ID = "immersivewiring"; - - public static ResourceLocation id(String path) { - return new ResourceLocation(ID, path); - } - - public static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(ID); - public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(ID); - public static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister - .create(Registries.BLOCK_ENTITY_TYPE, ID); - - public ImmersiveWiring(IEventBus modEventBus) { - if (ModList.get().isLoaded("ae2")) { - AEModule.init(modEventBus); - } - - BLOCKS.register(modEventBus); - ITEMS.register(modEventBus); - BLOCK_ENTITY_TYPES.register(modEventBus); - } -} diff --git a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/AEModule.java b/src/main/java/dev/technici4n/immersivewiring/modules/ae2/AEModule.java deleted file mode 100644 index 9d86487..0000000 --- a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/AEModule.java +++ /dev/null @@ -1,73 +0,0 @@ -package dev.technici4n.immersivewiring.modules.ae2; - -import org.jetbrains.annotations.Nullable; - -import net.minecraft.core.Direction; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.neoforge.capabilities.BlockCapability; -import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; -import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; -import net.neoforged.neoforge.registries.DeferredBlock; -import net.neoforged.neoforge.registries.DeferredHolder; -import net.neoforged.neoforge.registries.DeferredItem; - -import blusunrize.immersiveengineering.api.wires.WireApi; -import blusunrize.immersiveengineering.common.blocks.BlockItemIE; -import blusunrize.immersiveengineering.common.items.WireCoilItem; -import dev.technici4n.immersivewiring.ImmersiveWiring; - -import appeng.api.ids.AECreativeTabIds; -import appeng.api.networking.IInWorldGridNodeHost; -import appeng.core.AppEng; - -public class AEModule { - @SuppressWarnings({ "Convert2MethodRef", "FunctionalExpressionCanBeFolded" }) - static final DeferredBlock> ME_CONNECTOR = ImmersiveWiring.BLOCKS - .register("connector_me", () -> new MEConnectorBlock<>(() -> AEModule.ME_CONNECTOR_BE.get())); - @SuppressWarnings({ "Convert2MethodRef", "FunctionalExpressionCanBeFolded" }) - static final DeferredBlock> ME_RELAY = ImmersiveWiring.BLOCKS - .register("connector_me_relay", () -> new MEConnectorBlock<>(() -> AEModule.ME_RELAY_BE.get())); - - static final DeferredItem ME_CONNECTOR_ITEM = ImmersiveWiring.ITEMS.register("connector_me", - () -> new BlockItemIE(ME_CONNECTOR.get())); - static final DeferredItem ME_RELAY_ITEM = ImmersiveWiring.ITEMS.register("connector_me_relay", - () -> new BlockItemIE(ME_RELAY.get())); - - static final DeferredItem ME_WIRE_COIL = ImmersiveWiring.ITEMS.register("wirecoil_me", - () -> new WireCoilItem(MEWireType.NORMAL)); - static final DeferredItem ME_WIRE_DENSE_COIL = ImmersiveWiring.ITEMS.register("wirecoil_me_dense", - () -> new WireCoilItem(MEWireType.DENSE)); - - static final DeferredHolder, BlockEntityType> ME_CONNECTOR_BE = ImmersiveWiring.BLOCK_ENTITY_TYPES - .register("connector_me", - () -> BlockEntityType.Builder.of(MEConnectorBlockEntity::new, ME_CONNECTOR.get()).build(null)); - static final DeferredHolder, BlockEntityType> ME_RELAY_BE = ImmersiveWiring.BLOCK_ENTITY_TYPES - .register("connector_me_relay", - () -> BlockEntityType.Builder.of(MEConnectorBlockEntity::new, ME_RELAY.get()).build(null)); - - static final BlockCapability IN_WORLD_GRID_NODE_HOST = BlockCapability - .createSided(AppEng.makeId("inworld_gridnode_host"), IInWorldGridNodeHost.class); - - public static void init(IEventBus modEventBus) { - WireApi.registerWireType(MEWireType.NORMAL); - WireApi.registerWireType(MEWireType.DENSE); - MELocalHandler.register(MELocalHandler.ID, MELocalHandler::new); - - modEventBus.addListener(AEModuleDatagen::init); - - modEventBus.addListener((RegisterCapabilitiesEvent event) -> { - event.registerBlockEntity(IN_WORLD_GRID_NODE_HOST, ME_CONNECTOR_BE.get(), (be, side) -> be); - }); - - modEventBus.addListener((BuildCreativeModeTabContentsEvent event) -> { - if (event.getTabKey() == AECreativeTabIds.MAIN) { - event.accept(ME_WIRE_COIL); - event.accept(ME_WIRE_DENSE_COIL); - event.accept(ME_CONNECTOR_ITEM); - event.accept(ME_RELAY_ITEM); - } - }); - } -} diff --git a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/AEModuleDatagen.java b/src/main/java/dev/technici4n/immersivewiring/modules/ae2/AEModuleDatagen.java deleted file mode 100644 index 2ac664f..0000000 --- a/src/main/java/dev/technici4n/immersivewiring/modules/ae2/AEModuleDatagen.java +++ /dev/null @@ -1,135 +0,0 @@ -package dev.technici4n.immersivewiring.modules.ae2; - -import java.util.List; -import java.util.Set; -import java.util.concurrent.CompletableFuture; - -import net.minecraft.core.HolderLookup; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.data.PackOutput; -import net.minecraft.data.loot.BlockLootSubProvider; -import net.minecraft.data.loot.LootTableProvider; -import net.minecraft.data.recipes.RecipeCategory; -import net.minecraft.data.recipes.RecipeOutput; -import net.minecraft.data.recipes.RecipeProvider; -import net.minecraft.data.recipes.ShapedRecipeBuilder; -import net.minecraft.tags.BlockTags; -import net.minecraft.world.flag.FeatureFlags; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; -import net.neoforged.neoforge.common.Tags; -import net.neoforged.neoforge.common.conditions.IConditionBuilder; -import net.neoforged.neoforge.common.data.BlockTagsProvider; -import net.neoforged.neoforge.common.data.ExistingFileHelper; -import net.neoforged.neoforge.data.event.GatherDataEvent; - -import dev.technici4n.immersivewiring.ImmersiveWiring; -import dev.technici4n.immersivewiring.data.IWBlockStatesProvider; - -import appeng.api.ids.AEBlockIds; -import appeng.api.ids.AEItemIds; -import appeng.api.ids.AEPartIds; - -public class AEModuleDatagen { - public static void init(GatherDataEvent event) { - var gen = event.getGenerator(); - - gen.addProvider(event.includeClient(), new StatesProvider(gen.getPackOutput(), event.getExistingFileHelper())); - - gen.addProvider(event.includeServer(), new LootTableProvider(gen.getPackOutput(), Set.of(), List.of( - new LootTableProvider.SubProviderEntry(BlockLoot::new, LootContextParamSets.BLOCK)))); - gen.addProvider(event.includeServer(), new Recipes(gen.getPackOutput())); - gen.addProvider(event.includeServer(), - new TagBlocks(gen.getPackOutput(), event.getLookupProvider(), event.getExistingFileHelper())); - } - - private static class StatesProvider extends IWBlockStatesProvider { - public StatesProvider(PackOutput output, ExistingFileHelper exFileHelper) { - super(output, exFileHelper, "AE2"); - } - - @Override - protected void registerStatesAndModels() { - createAllRotatedBlock(AEModule.ME_CONNECTOR, - models().getExistingFile(ImmersiveWiring.id("block/connector_me"))); - createAllRotatedBlock(AEModule.ME_RELAY, - models().getExistingFile(ImmersiveWiring.id("block/connector_me_relay"))); - - itemModels().basicItem(AEModule.ME_WIRE_COIL.asItem()); - itemModels().basicItem(AEModule.ME_WIRE_DENSE_COIL.asItem()); - } - } - - private static class Recipes extends RecipeProvider implements IConditionBuilder { - public Recipes(PackOutput packOutput) { - super(packOutput); - } - - @Override - protected void buildRecipes(RecipeOutput baseOutput) { - var output = baseOutput.withConditions(modLoaded("ae2")); - - ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AEModule.ME_CONNECTOR, 4) - .pattern(" f ") - .pattern("FfF") - .pattern("FfF") - .define('f', BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL)) - .define('F', BuiltInRegistries.ITEM.get(AEBlockIds.FLUIX_BLOCK)) - .unlockedBy("has_fluix", has(BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL))) - .save(output, ImmersiveWiring.id("ae2/connector_me")); - ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AEModule.ME_RELAY, 8) - .pattern(" f ") - .pattern("FfF") - .define('f', BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL)) - .define('F', BuiltInRegistries.ITEM.get(AEBlockIds.FLUIX_BLOCK)) - .unlockedBy("has_fluix", has(BuiltInRegistries.ITEM.get(AEItemIds.FLUIX_CRYSTAL))) - .save(output, ImmersiveWiring.id("ae2/connector_me_relay")); - - ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AEModule.ME_WIRE_COIL, 4) - .pattern(" c ") - .pattern("csc") - .pattern(" c ") - .define('c', BuiltInRegistries.ITEM.get(AEPartIds.CABLE_GLASS_TRANSPARENT)) - .define('s', Tags.Items.RODS_WOODEN) - .unlockedBy("has_cable", has(BuiltInRegistries.ITEM.get(AEPartIds.CABLE_GLASS_TRANSPARENT))) - .save(output, ImmersiveWiring.id("ae2/wirecoil_me")); - ShapedRecipeBuilder.shaped(RecipeCategory.MISC, AEModule.ME_WIRE_DENSE_COIL, 4) - .pattern(" c ") - .pattern("csc") - .pattern(" c ") - .define('c', BuiltInRegistries.ITEM.get(AEPartIds.CABLE_DENSE_COVERED_TRANSPARENT)) - .define('s', Tags.Items.RODS_WOODEN) - .unlockedBy("has_cable", has(BuiltInRegistries.ITEM.get(AEPartIds.CABLE_DENSE_COVERED_TRANSPARENT))) - .save(output, ImmersiveWiring.id("ae2/wirecoil_me_dense")); - } - } - - private static class BlockLoot extends BlockLootSubProvider { - protected BlockLoot() { - super(Set.of(), FeatureFlags.VANILLA_SET); - } - - @Override - protected void generate() { - dropSelf(AEModule.ME_CONNECTOR.get()); - dropSelf(AEModule.ME_RELAY.get()); - } - - @Override - protected Iterable getKnownBlocks() { - return List.of(AEModule.ME_CONNECTOR.get(), AEModule.ME_RELAY.get()); - } - } - - private static class TagBlocks extends BlockTagsProvider { - public TagBlocks(PackOutput packOutput, CompletableFuture registries, - ExistingFileHelper existingFileHelper) { - super(packOutput, registries, ImmersiveWiring.ID, existingFileHelper); - } - - @Override - protected void addTags(HolderLookup.Provider registries) { - tag(BlockTags.MINEABLE_WITH_PICKAXE).add(AEModule.ME_CONNECTOR.get(), AEModule.ME_RELAY.get()); - } - } -} diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 7e3c5bc..72ffc15 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -1,14 +1,14 @@ modLoader = "javafml" loaderVersion = "${loader_version_range}" -issueTrackerURL = "https://github.com/Technici4n/Immersive-Wiring/issues" -license = "See GitHub repository for details" +issueTrackerURL = "https://github.com/AppliedEnergistics/Immersive-Energistics/issues" +license = "LGPLv3" [[mods]] -modId = "immersivewiring" +modId = "immeng" version = "${version}" -displayName = "Immersive Wiring" -description = "Expands Immersive Engineering with more wires" -displayURL = "https://github.com/Technici4n/Immersive-Wiring" +displayName = "Immersive Energistics" +description = "Adds ME-capable wires to Immersive Engineering." +displayURL = "https://github.com/AppliedEnergistics/Immersive-Energistics" logoFile = "logo.png" authors = "Technici4n" diff --git a/src/main/resources/assets/immeng/lang/en_us.json b/src/main/resources/assets/immeng/lang/en_us.json new file mode 100644 index 0000000..180d3c5 --- /dev/null +++ b/src/main/resources/assets/immeng/lang/en_us.json @@ -0,0 +1,6 @@ +{ + "block.immeng.connector_me": "ME Connector", + "block.immeng.connector_me_relay": "ME Relay", + "item.immeng.wirecoil_me": "ME Wire Coil", + "item.immeng.wirecoil_me_dense": "Dense ME Wire Coil" +} diff --git a/src/main/resources/assets/immersivewiring/models/block/connector_me.json b/src/main/resources/assets/immeng/models/block/connector_me.json similarity index 91% rename from src/main/resources/assets/immersivewiring/models/block/connector_me.json rename to src/main/resources/assets/immeng/models/block/connector_me.json index 7fa946f..f9c6a65 100644 --- a/src/main/resources/assets/immersivewiring/models/block/connector_me.json +++ b/src/main/resources/assets/immeng/models/block/connector_me.json @@ -1,8 +1,8 @@ { "credit": "Made with Blockbench", "textures": { - "1": "immersivewiring:block/connector_me", - "particle": "immersivewiring:block/connector_me" + "1": "immeng:block/connector_me", + "particle": "immeng:block/connector_me" }, "elements": [ { diff --git a/src/main/resources/assets/immersivewiring/models/block/connector_me_relay.json b/src/main/resources/assets/immeng/models/block/connector_me_relay.json similarity index 95% rename from src/main/resources/assets/immersivewiring/models/block/connector_me_relay.json rename to src/main/resources/assets/immeng/models/block/connector_me_relay.json index c60819d..5d9c304 100644 --- a/src/main/resources/assets/immersivewiring/models/block/connector_me_relay.json +++ b/src/main/resources/assets/immeng/models/block/connector_me_relay.json @@ -1,8 +1,8 @@ { "credit": "Made with Blockbench", "textures": { - "0": "immersivewiring:block/connector_me_relay", - "particle": "immersivewiring:block/connector_me_relay" + "0": "immeng:block/connector_me_relay", + "particle": "immeng:block/connector_me_relay" }, "elements": [ { diff --git a/src/main/resources/assets/immersivewiring/models/item/connector_me.json b/src/main/resources/assets/immeng/models/item/connector_me.json similarity index 96% rename from src/main/resources/assets/immersivewiring/models/item/connector_me.json rename to src/main/resources/assets/immeng/models/item/connector_me.json index 810fb9a..7420a23 100644 --- a/src/main/resources/assets/immersivewiring/models/item/connector_me.json +++ b/src/main/resources/assets/immeng/models/item/connector_me.json @@ -46,5 +46,5 @@ "translation": [-1.0, 2.0, 3.0] } }, - "parent": "immersivewiring:block/connector_me" + "parent": "immeng:block/connector_me" } diff --git a/src/main/resources/assets/immersivewiring/models/item/connector_me_relay.json b/src/main/resources/assets/immeng/models/item/connector_me_relay.json similarity index 96% rename from src/main/resources/assets/immersivewiring/models/item/connector_me_relay.json rename to src/main/resources/assets/immeng/models/item/connector_me_relay.json index 47ddf0e..d62feba 100644 --- a/src/main/resources/assets/immersivewiring/models/item/connector_me_relay.json +++ b/src/main/resources/assets/immeng/models/item/connector_me_relay.json @@ -46,5 +46,5 @@ "translation": [-1.0, 2.0, 3.0] } }, - "parent": "immersivewiring:block/connector_me_relay" + "parent": "immeng:block/connector_me_relay" } diff --git a/src/main/resources/assets/immersivewiring/textures/block/connector_me.png b/src/main/resources/assets/immeng/textures/block/connector_me.png similarity index 100% rename from src/main/resources/assets/immersivewiring/textures/block/connector_me.png rename to src/main/resources/assets/immeng/textures/block/connector_me.png diff --git a/src/main/resources/assets/immersivewiring/textures/block/connector_me_relay.png b/src/main/resources/assets/immeng/textures/block/connector_me_relay.png similarity index 100% rename from src/main/resources/assets/immersivewiring/textures/block/connector_me_relay.png rename to src/main/resources/assets/immeng/textures/block/connector_me_relay.png diff --git a/src/main/resources/assets/immersivewiring/textures/item/wirecoil_me.png b/src/main/resources/assets/immeng/textures/item/wirecoil_me.png similarity index 100% rename from src/main/resources/assets/immersivewiring/textures/item/wirecoil_me.png rename to src/main/resources/assets/immeng/textures/item/wirecoil_me.png diff --git a/src/main/resources/assets/immersivewiring/textures/item/wirecoil_me_dense.png b/src/main/resources/assets/immeng/textures/item/wirecoil_me_dense.png similarity index 100% rename from src/main/resources/assets/immersivewiring/textures/item/wirecoil_me_dense.png rename to src/main/resources/assets/immeng/textures/item/wirecoil_me_dense.png diff --git a/src/main/resources/assets/immersivewiring/lang/en_us.json b/src/main/resources/assets/immersivewiring/lang/en_us.json deleted file mode 100644 index 7a02776..0000000 --- a/src/main/resources/assets/immersivewiring/lang/en_us.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "block.immersivewiring.connector_me": "ME Connector", - "block.immersivewiring.connector_me_relay": "ME Relay", - "item.immersivewiring.wirecoil_me": "ME Wire Coil", - "item.immersivewiring.wirecoil_me_dense": "Dense ME Wire Coil" -} diff --git a/src/main/resources/logo.png b/src/main/resources/logo.png new file mode 100644 index 0000000..166b06c Binary files /dev/null and b/src/main/resources/logo.png differ