diff --git a/dependencies.gradle b/dependencies.gradle index 381e3f8..08a52f6 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -37,7 +37,8 @@ dependencies { runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.6.36-GTNH:dev") api("com.github.GTNewHorizons:GTNHLib:0.5.11:dev") api("com.github.GTNewHorizons:ModularUI2:2.1.8-1.7.10:dev") - shadowImplementation("dev.dominion.ecs:dominion-ecs-engine:0.9.0") // MIT License + //shadowImplementation("dev.dominion.ecs:dominion-ecs-engine:0.9.0") // MIT License + shadowImplementation("com.badlogicgames.ashley:ashley:1.7.4") // Apache 2.0 License api("com.github.GTNewHorizons:waila:1.8.1:dev") //api("com.github.GTNewHorizons:Angelica:1.0.0-beta6:dev") //implementation("com.github.GTNewHorizons:Galacticraft:3.2.4-GTNH:dev") diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e644113..2c35211 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 09523c0..e2847c8 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 1aa94a4..f5feea6 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 25da30d..9d21a21 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/repositories.gradle b/repositories.gradle index 88c4368..79dd8ee 100644 --- a/repositories.gradle +++ b/repositories.gradle @@ -2,4 +2,5 @@ repositories { mavenLocal() + maven { url "https://oss.sonatype.org/content/repositories/releases/" } } diff --git a/settings.gradle b/settings.gradle index 0cfd055..16e84e7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -17,5 +17,5 @@ pluginManagement { } plugins { - id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.25' + id 'com.gtnewhorizons.gtnhsettingsconvention' version '1.0.30' } diff --git a/src/main/java/com/gtnewhorizons/mutecore/MuTECore.java b/src/main/java/com/gtnewhorizons/mutecore/MuTECore.java index 9960a11..fe72921 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/MuTECore.java +++ b/src/main/java/com/gtnewhorizons/mutecore/MuTECore.java @@ -6,11 +6,17 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Engine; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.Family; +import com.badlogic.ashley.utils.ImmutableArray; import com.cleanroommc.modularui.factory.GuiManager; import com.gtnewhorizons.mutecore.api.data.Coordinates; import com.gtnewhorizons.mutecore.api.data.GUIEvent; import com.gtnewhorizons.mutecore.api.data.WorldStateValidator; import com.gtnewhorizons.mutecore.api.event.PlayerInteractionEvent; +import com.gtnewhorizons.mutecore.api.gui.GUISystem; import com.gtnewhorizons.mutecore.api.gui.MultiTileEntityGuiFactory; import com.gtnewhorizons.mutecore.api.registry.EventRegistry; import com.gtnewhorizons.mutecore.api.registry.MultiTileContainer.FakeEntity; @@ -25,13 +31,10 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; import cpw.mods.fml.common.event.FMLServerStoppingEvent; import cpw.mods.fml.common.registry.GameRegistry; -import dev.dominion.ecs.api.Dominion; -import dev.dominion.ecs.api.Entity; -import dev.dominion.ecs.api.Results; -import dev.dominion.ecs.engine.IntEntity; @Mod( modid = MuTECore.MODID, @@ -49,14 +52,14 @@ public class MuTECore { clientSide = "com.gtnewhorizons.mutecore.ClientProxy", serverSide = "com.gtnewhorizons.mutecore.CommonProxy") public static CommonProxy proxy; - public static Dominion ENGINE; + public static Engine ENGINE; public static boolean ENABLE_TESTS; public MuTECore() {} @Mod.EventHandler public void preInit(FMLPreInitializationEvent event) { - ENGINE = Dominion.create("MuTE"); + ENGINE = new Engine(); ENABLE_TESTS = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); if (ENABLE_TESTS) { new TestRegistry().run(); @@ -71,23 +74,7 @@ public void init(FMLInitializationEvent initEvent) { proxy.init(initEvent); EventRegistry.registerPlayerInteractionEvent( new PlayerInteractionEvent(0, (p, e) -> PlayerHelper.isRealPlayer(p) ? new GUIEvent(p) : null)); - SystemRegistrator.registerSystem(() -> { - Results> results = MuTECore.ENGINE.findEntitiesWith(GUIEvent.class); - for (Results.With1 result : results) { - Entity entity = result.entity(); - GUIEvent event = entity.get(GUIEvent.class); - Coordinates coords = entity.get(Coordinates.class); - NBTTagCompound nbt = new NBTTagCompound(); - Object[] components = ((IntEntity) entity).getComponentArray(); - for (Object component : components) { - if (component instanceof WorldStateValidator validator) { - validator.save(nbt); - } - } - MultiTileEntityGuiFactory.open(event.getPlayer(), coords.getX(), coords.getY(), coords.getZ(), nbt); - entity.removeType(GUIEvent.class); - } - }); + SystemRegistrator.registerSystem(new GUISystem()); } @Mod.EventHandler @@ -98,18 +85,21 @@ public void postInit(FMLPostInitializationEvent event) { .register(new SystemRegistrator()); } + @Mod.EventHandler + public void onServerAboutToStart(FMLServerAboutToStartEvent event) { + MultiTileEntityRegistry.registerForSave(); + } + @Mod.EventHandler public void serverStarting(FMLServerStartingEvent event) { proxy.serverStarting(event); - MultiTileEntityRegistry.registerForSave(); } @Mod.EventHandler public void serverStopping(FMLServerStoppingEvent event) { - Results results = ENGINE.findAllEntities(); + ImmutableArray results = ENGINE.getEntities(); for (Entity entity : results) { - if (entity.has(FakeEntity.class)) continue; - ENGINE.deleteEntity(entity); + ENGINE.removeEntity(entity); } } } diff --git a/src/main/java/com/gtnewhorizons/mutecore/MuTENetwork.java b/src/main/java/com/gtnewhorizons/mutecore/MuTENetwork.java index 167526e..4744f4f 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/MuTENetwork.java +++ b/src/main/java/com/gtnewhorizons/mutecore/MuTENetwork.java @@ -17,6 +17,9 @@ import org.jetbrains.annotations.Nullable; +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.utils.ImmutableArray; import com.cleanroommc.modularui.network.IPacket; import com.gtnewhorizons.mutecore.api.block.MultiTileEntityBlock; import com.gtnewhorizons.mutecore.api.data.Coordinates; @@ -30,8 +33,6 @@ import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import cpw.mods.fml.relauncher.Side; -import dev.dominion.ecs.api.Entity; -import dev.dominion.ecs.engine.IntEntity; public class MuTENetwork { @@ -122,9 +123,9 @@ public void read(PacketBuffer buf) throws IOException { Entity entity = container.createNewEntity(); entity.add(coords); entity.add(new WorldContainer(Minecraft.getMinecraft().theWorld)); - Object[] components = ((IntEntity) entity).getComponentArray(); - for (int i = 0; i < components.length; i++) { - if (!(components[i] instanceof WorldStateValidator validator)) continue; + ImmutableArray components = entity.getComponents(); + for (int i = 0; i < components.size(); i++) { + if (!(components.get(i) instanceof WorldStateValidator validator)) continue; validator.load(data); } mute.setEntity(entity); diff --git a/src/main/java/com/gtnewhorizons/mutecore/SystemRegistrator.java b/src/main/java/com/gtnewhorizons/mutecore/SystemRegistrator.java index c102152..7e7db87 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/SystemRegistrator.java +++ b/src/main/java/com/gtnewhorizons/mutecore/SystemRegistrator.java @@ -1,49 +1,31 @@ package com.gtnewhorizons.mutecore; +import com.badlogic.ashley.core.EntitySystem; + import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent; -import dev.dominion.ecs.api.Scheduler; public class SystemRegistrator { - private static final Scheduler SYSTEMS = MuTECore.ENGINE.createScheduler(); /** * Register a single system. It will be ran after the last registered system */ - public static void registerSystem(Runnable system) { - SYSTEMS.schedule(system); + public static void registerSystem(EntitySystem system) { + MuTECore.ENGINE.addSystem(system); } /** * Register any amount of systems. The systems will be scheduled one after another. */ - public static void registerSystems(Runnable... systems) { - for (Runnable system : systems) { - SYSTEMS.schedule(system); - } - } - - /** - * Register any amount of systems. The systems registered this way will be ran in parallel - */ - public static void registerSystemsParallel(Runnable... systems) { - int processors = Runtime.getRuntime() - .availableProcessors(); - Runnable[] parallel = new Runnable[processors]; - int count = 0; - for (Runnable system : systems) { - parallel[count++] = system; - if (count >= processors) { - SYSTEMS.parallelSchedule(parallel); - count = 0; - parallel = new Runnable[processors]; - } + public static void registerSystems(EntitySystem... systems) { + for (EntitySystem system : systems) { + MuTECore.ENGINE.addSystem(system); } } @SubscribeEvent public void onServerTick(TickEvent.ServerTickEvent event) { - SYSTEMS.tick(); + MuTECore.ENGINE.update(1); } } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/block/MultiTileEntityBlock.java b/src/main/java/com/gtnewhorizons/mutecore/api/block/MultiTileEntityBlock.java index 52ff1be..37d47f2 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/block/MultiTileEntityBlock.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/block/MultiTileEntityBlock.java @@ -19,6 +19,8 @@ import org.jetbrains.annotations.ApiStatus.Internal; +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Entity; import com.gtnewhorizons.mutecore.MuTECore; import com.gtnewhorizons.mutecore.MuTENetwork; import com.gtnewhorizons.mutecore.MuTENetwork.MuTEPacket; @@ -35,8 +37,6 @@ import com.gtnewhorizons.mutecore.api.tile.MultiTileEntity; import com.gtnewhorizons.mutecore.client.MultiTileBlockRenderer; -import dev.dominion.ecs.api.Entity; - public class MultiTileEntityBlock extends BlockContainer { MultiTileEntityRegistry registry; @@ -59,7 +59,7 @@ public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) { public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) { Entity entity = ((MultiTileEntity) world.getTileEntity(x, y, z)).getEntity(); return registry.getItemStack( - entity.get(Id.class) + entity.getComponent(Id.class) .getId()); } @@ -98,14 +98,14 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer packet.setComponentData(nbt); MuTENetwork.sendToPlayer(packet, playermp); } - Object eventComponent = null; + Component eventComponent = null; for (PlayerInteractionEvent preEvent : EventRegistry.PLAYER_INTERACTION_EVENTS) { eventComponent = preEvent.generate(player, mute.getEntity()); if (eventComponent != null) break; } if (eventComponent == null) return false; if (mute.getEntity() - .has(eventComponent.getClass())) return false; + .getComponent(eventComponent.getClass()) != null) return false; mute.getEntity() .add(eventComponent); return true; @@ -119,7 +119,7 @@ public void breakBlock(World worldIn, int x, int y, int z, Block blockBroken, in for (BlockBreakEvent preEvent : EventRegistry.BLOCK_BREAK_EVENTS) { preEvent.call(entity); } - MuTECore.ENGINE.deleteEntity(entity); + MuTECore.ENGINE.removeEntity(entity); super.breakBlock(worldIn, x, y, z, blockBroken, meta); } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/data/Coordinates.java b/src/main/java/com/gtnewhorizons/mutecore/api/data/Coordinates.java index e8c8ae9..80b8d0c 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/data/Coordinates.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/data/Coordinates.java @@ -1,8 +1,10 @@ package com.gtnewhorizons.mutecore.api.data; +import com.badlogic.ashley.core.Component; + import net.minecraft.nbt.NBTTagCompound; -public class Coordinates implements WorldStateValidator { +public class Coordinates implements Component, WorldStateValidator { private int x; private int y; diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/data/Direction.java b/src/main/java/com/gtnewhorizons/mutecore/api/data/Direction.java index f4a32f4..59d9075 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/data/Direction.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/data/Direction.java @@ -1,9 +1,11 @@ package com.gtnewhorizons.mutecore.api.data; +import com.badlogic.ashley.core.Component; + import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; -public class Direction implements WorldStateValidator { +public class Direction implements Component, WorldStateValidator { private ForgeDirection direction; diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/data/FirstTickEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/data/FirstTickEvent.java index a8b2aec..d80b9b2 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/data/FirstTickEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/data/FirstTickEvent.java @@ -1,4 +1,6 @@ package com.gtnewhorizons.mutecore.api.data; -public class FirstTickEvent { +import com.badlogic.ashley.core.Component; + +public class FirstTickEvent implements Component { } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/data/GUIEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/data/GUIEvent.java index 57c8963..24583b8 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/data/GUIEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/data/GUIEvent.java @@ -1,8 +1,10 @@ package com.gtnewhorizons.mutecore.api.data; +import com.badlogic.ashley.core.Component; + import net.minecraft.entity.player.EntityPlayer; -public class GUIEvent { +public class GUIEvent implements Component { private EntityPlayer player; diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/data/PlayerUUID.java b/src/main/java/com/gtnewhorizons/mutecore/api/data/PlayerUUID.java index 6c59a7a..7670fdb 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/data/PlayerUUID.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/data/PlayerUUID.java @@ -2,9 +2,11 @@ import java.util.UUID; +import com.badlogic.ashley.core.Component; + import net.minecraft.nbt.NBTTagCompound; -public class PlayerUUID implements WorldStateValidator { +public class PlayerUUID implements Component, WorldStateValidator { private UUID playerUUID; diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/data/WorldContainer.java b/src/main/java/com/gtnewhorizons/mutecore/api/data/WorldContainer.java index db72703..0e29f24 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/data/WorldContainer.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/data/WorldContainer.java @@ -1,8 +1,10 @@ package com.gtnewhorizons.mutecore.api.data; +import com.badlogic.ashley.core.Component; + import net.minecraft.world.World; -public class WorldContainer { +public class WorldContainer implements Component { private World world; diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockBreakEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockBreakEvent.java index 17303ef..21fa224 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockBreakEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockBreakEvent.java @@ -2,7 +2,8 @@ import javax.annotation.Nonnull; -import dev.dominion.ecs.api.Entity; +import com.badlogic.ashley.core.Entity; + public class BlockBreakEvent implements Comparable { diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockPlaceEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockPlaceEvent.java index 2d18ca2..52f7a8b 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockPlaceEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/event/BlockPlaceEvent.java @@ -2,7 +2,8 @@ import javax.annotation.Nonnull; -import dev.dominion.ecs.api.Entity; +import com.badlogic.ashley.core.Entity; + public class BlockPlaceEvent implements Comparable { diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborBlockChangeEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborBlockChangeEvent.java index 2311943..5157454 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborBlockChangeEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborBlockChangeEvent.java @@ -2,9 +2,9 @@ import javax.annotation.Nonnull; -import net.minecraft.block.Block; +import com.badlogic.ashley.core.Entity; -import dev.dominion.ecs.api.Entity; +import net.minecraft.block.Block; public class NeighborBlockChangeEvent implements Comparable { diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborTileChangeEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborTileChangeEvent.java index 41a8d60..92ce9e9 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborTileChangeEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/event/NeighborTileChangeEvent.java @@ -2,9 +2,9 @@ import javax.annotation.Nonnull; -import net.minecraft.tileentity.TileEntity; +import com.badlogic.ashley.core.Entity; -import dev.dominion.ecs.api.Entity; +import net.minecraft.tileentity.TileEntity; public class NeighborTileChangeEvent implements Comparable { diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/event/PlayerInteractionEvent.java b/src/main/java/com/gtnewhorizons/mutecore/api/event/PlayerInteractionEvent.java index 6820524..15997b7 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/event/PlayerInteractionEvent.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/event/PlayerInteractionEvent.java @@ -2,9 +2,11 @@ import javax.annotation.Nonnull; +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Entity; + import net.minecraft.entity.player.EntityPlayer; -import dev.dominion.ecs.api.Entity; public class PlayerInteractionEvent implements Comparable { @@ -16,7 +18,7 @@ public PlayerInteractionEvent(int priority, @Nonnull PlayerInteraction interacti this.interaction = interaction; } - public final @Nonnull Object generate(@Nonnull EntityPlayer player, @Nonnull Entity entity) { + public final @Nonnull Component generate(@Nonnull EntityPlayer player, @Nonnull Entity entity) { return interaction.generateComponent(player, entity); } @@ -24,7 +26,7 @@ public PlayerInteractionEvent(int priority, @Nonnull PlayerInteraction interacti public static interface PlayerInteraction { @Nonnull - Object generateComponent(@Nonnull EntityPlayer player, @Nonnull Entity entity); + Component generateComponent(@Nonnull EntityPlayer player, @Nonnull Entity entity); } @Override diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/gui/GUISystem.java b/src/main/java/com/gtnewhorizons/mutecore/api/gui/GUISystem.java new file mode 100644 index 0000000..c129873 --- /dev/null +++ b/src/main/java/com/gtnewhorizons/mutecore/api/gui/GUISystem.java @@ -0,0 +1,34 @@ +package com.gtnewhorizons.mutecore.api.gui; + +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.core.EntitySystem; +import com.badlogic.ashley.core.Family; +import com.badlogic.ashley.utils.ImmutableArray; +import com.gtnewhorizons.mutecore.MuTECore; +import com.gtnewhorizons.mutecore.api.data.Coordinates; +import com.gtnewhorizons.mutecore.api.data.GUIEvent; +import com.gtnewhorizons.mutecore.api.data.WorldStateValidator; + +import net.minecraft.nbt.NBTTagCompound; + +public class GUISystem extends EntitySystem { + + @Override + public void update(float deltaTime) { + ImmutableArray results = MuTECore.ENGINE.getEntitiesFor(Family.one(GUIEvent.class).get()); + for (Entity entity : results) { + GUIEvent event = entity.getComponent(GUIEvent.class); + Coordinates coords = entity.getComponent(Coordinates.class); + NBTTagCompound nbt = new NBTTagCompound(); + ImmutableArray components = entity.getComponents(); + for (Object component : components) { + if (component instanceof WorldStateValidator validator) { + validator.save(nbt); + } + } + MultiTileEntityGuiFactory.open(event.getPlayer(), coords.getX(), coords.getY(), coords.getZ(), nbt); + entity.remove(GUIEvent.class); + } + } +} diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/gui/MuTEGUI.java b/src/main/java/com/gtnewhorizons/mutecore/api/gui/MuTEGUI.java index 178eb30..7225e3c 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/gui/MuTEGUI.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/gui/MuTEGUI.java @@ -1,10 +1,9 @@ package com.gtnewhorizons.mutecore.api.gui; +import com.badlogic.ashley.core.Entity; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.PanelSyncManager; -import dev.dominion.ecs.api.Entity; - public interface MuTEGUI { ModularPanel createGUI(Entity entity, PanelSyncManager syncManager); diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/inventory/FluidInventory.java b/src/main/java/com/gtnewhorizons/mutecore/api/inventory/FluidInventory.java index 2e3770c..5fdff88 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/inventory/FluidInventory.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/inventory/FluidInventory.java @@ -1,8 +1,9 @@ package com.gtnewhorizons.mutecore.api.inventory; +import com.badlogic.ashley.core.Component; import com.cleanroommc.modularui.utils.fluid.IFluidTankLong; -public interface FluidInventory { +public interface FluidInventory extends Component { IFluidTankLong get(int index); diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/inventory/ItemInventory.java b/src/main/java/com/gtnewhorizons/mutecore/api/inventory/ItemInventory.java index cfa2791..a79468c 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/inventory/ItemInventory.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/inventory/ItemInventory.java @@ -1,8 +1,9 @@ package com.gtnewhorizons.mutecore.api.inventory; +import com.badlogic.ashley.core.Component; import com.cleanroommc.modularui.utils.item.IItemStackLong; -public interface ItemInventory { +public interface ItemInventory extends Component { IItemStackLong get(int index); diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java b/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java index 3233d72..4d909b7 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/item/MultiTileEntityItem.java @@ -12,14 +12,13 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; +import com.badlogic.ashley.core.Entity; import com.gtnewhorizons.mutecore.api.block.MultiTileEntityBlock; import com.gtnewhorizons.mutecore.api.data.PlayerUUID; import com.gtnewhorizons.mutecore.api.data.WorldContainer; import com.gtnewhorizons.mutecore.api.registry.MultiTileContainer; import com.gtnewhorizons.mutecore.api.tile.MultiTileEntity; -import dev.dominion.ecs.api.Entity; - public class MultiTileEntityItem extends ItemBlock implements IFluidContainerItem { private final MultiTileEntityBlock block; @@ -42,7 +41,7 @@ public void addInformation(ItemStack itemStack, EntityPlayer player, List toolTipClass = container.getTooltipClass(); if (toolTipClass == null) return; Entity entity = container.getFakeEntity(); - TooltipAssigner tooltipData = entity.get(toolTipClass); + TooltipAssigner tooltipData = entity.getComponent(toolTipClass); tooltipData.assignTooltip(tooltip); } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/item/TooltipAssigner.java b/src/main/java/com/gtnewhorizons/mutecore/api/item/TooltipAssigner.java index 2ff8015..a25703b 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/item/TooltipAssigner.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/item/TooltipAssigner.java @@ -2,7 +2,9 @@ import java.util.List; -public interface TooltipAssigner { +import com.badlogic.ashley.core.Component; + +public interface TooltipAssigner extends Component { void assignTooltip(List tooltip); } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentsCreator.java b/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentsCreator.java index 8ae5cf3..b1e7581 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentsCreator.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/registry/ComponentsCreator.java @@ -4,14 +4,16 @@ import java.util.List; import java.util.function.Supplier; +import com.badlogic.ashley.core.Component; + public class ComponentsCreator { private boolean built; - private List> componentBuilders = new ArrayList<>(); + private List> componentBuilders = new ArrayList<>(); public ComponentsCreator() {} - public ComponentsCreator component(Supplier componentBuilder) { + public ComponentsCreator component(Supplier componentBuilder) { if (built) throw new IllegalStateException("Cannot add components after the builder has been finished"); componentBuilders.add(componentBuilder); return this; @@ -22,9 +24,9 @@ public ComponentsCreator build() { return this; } - public List createComponents() { + public List createComponents() { if (!built) throw new IllegalStateException("Cannot create components when the builder is unfinished"); - List components = new ArrayList<>(); + List components = new ArrayList<>(); for (int i = 0; i < componentBuilders.size(); i++) { components.add(componentBuilders.get(i).get()); } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java b/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java index 99040c6..4362804 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileContainer.java @@ -11,6 +11,8 @@ import net.minecraft.nbt.NBTTagCompound; +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Entity; import com.gtnewhorizons.mutecore.MuTECore; import com.gtnewhorizons.mutecore.api.data.FirstTickEvent; import com.gtnewhorizons.mutecore.api.data.WorldStateValidator; @@ -18,8 +20,6 @@ import com.gtnewhorizons.mutecore.api.item.TooltipAssigner; import com.gtnewhorizons.mutecore.api.tile.MultiTileEntity; -import dev.dominion.ecs.api.Entity; - public class MultiTileContainer { private final @Nonnull Class clazz; @@ -36,12 +36,12 @@ public MultiTileContainer(@Nonnull MultiTileEntityRegistry reg, int id, this.reg = new WeakReference<>(reg); this.clazz = clazz; this.id = id; - fakeEntity = MuTECore.ENGINE.createEntity(new FakeEntity()); + fakeEntity = new Entity(); } public @Nonnull MultiTileContainer componentsCreator(ComponentsCreator componentsCreator) { this.componentsCreator = componentsCreator; - List components = this.componentsCreator.createComponents(); + List components = this.componentsCreator.createComponents(); for (int i = 0; i < components.size(); i++) { fakeEntity.add(components.get(i)); } @@ -70,14 +70,18 @@ public boolean register() { } public @Nonnull Entity createNewEntity() { - List components = componentsCreator.createComponents(); - Entity newEntity = MuTECore.ENGINE.createEntity(components.toArray()); + List components = componentsCreator.createComponents(); + Entity newEntity = new Entity(); + for (int i = 0; i < components.size(); i++) { + newEntity.add(components.get(i)); + } newEntity.add( new Id( id, reg.get() .getBlockId())); newEntity.add(new FirstTickEvent()); + MuTECore.ENGINE.addEntity(newEntity); return newEntity; } @@ -125,10 +129,10 @@ public boolean equals(Object obj) { return true; } - public static class FakeEntity { + public static class FakeEntity implements Component { } - public static class Id implements WorldStateValidator { + public static class Id implements Component, WorldStateValidator { private int id; private int regId; diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileEntityRegistry.java b/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileEntityRegistry.java index 07326bc..0cc2b68 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileEntityRegistry.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/registry/MultiTileEntityRegistry.java @@ -43,6 +43,7 @@ public static void registerForSave() { Pair pair = TO_REGISTER.get(i); int id = Block.getIdFromBlock(pair.left()); REGISTRY_MAP.put(id, pair.right()); + System.out.println("putting in registries"); } } diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/render/MuTERender.java b/src/main/java/com/gtnewhorizons/mutecore/api/render/MuTERender.java index 3f07bb5..3734f57 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/render/MuTERender.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/render/MuTERender.java @@ -1,10 +1,10 @@ package com.gtnewhorizons.mutecore.api.render; +import com.badlogic.ashley.core.Entity; + import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.world.IBlockAccess; -import dev.dominion.ecs.api.Entity; - public interface MuTERender { void render(Entity entity, RenderBlocks render, int x, int y, int z, IBlockAccess world); diff --git a/src/main/java/com/gtnewhorizons/mutecore/api/tile/MultiTileEntity.java b/src/main/java/com/gtnewhorizons/mutecore/api/tile/MultiTileEntity.java index f16e0b7..202125c 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/api/tile/MultiTileEntity.java +++ b/src/main/java/com/gtnewhorizons/mutecore/api/tile/MultiTileEntity.java @@ -6,6 +6,9 @@ import org.jetbrains.annotations.ApiStatus.Internal; +import com.badlogic.ashley.core.Component; +import com.badlogic.ashley.core.Entity; +import com.badlogic.ashley.utils.ImmutableArray; import com.cleanroommc.modularui.api.IGuiHolder; import com.cleanroommc.modularui.screen.ModularPanel; import com.cleanroommc.modularui.value.sync.PanelSyncManager; @@ -21,9 +24,6 @@ import com.gtnewhorizons.mutecore.api.registry.MultiTileContainer.Id; import com.gtnewhorizons.mutecore.api.registry.MultiTileEntityRegistry; -import dev.dominion.ecs.api.Entity; -import dev.dominion.ecs.engine.IntEntity; - public class MultiTileEntity extends TileEntity implements IGuiHolder { private Entity entity; @@ -32,7 +32,7 @@ public MultiTileEntity() {} public void setEntity(Entity entity) { if (this.entity != null) { - MuTECore.ENGINE.deleteEntity(this.entity); + MuTECore.ENGINE.removeEntity(entity); } this.entity = entity; } @@ -62,16 +62,16 @@ public ModularPanel buildUI(ComponentData data, PanelSyncManager syncManager) { MultiTileEntityRegistry reg = ((MultiTileEntityBlock) data.getWorld() .getBlock(xCoord, yCoord, zCoord)).getRegistry(); MultiTileContainer container = reg.getMultiTileContainer( - entity.get(Id.class) + entity.getComponent(Id.class) .getId()); if (entity == null) { entity = container.createNewEntity(); } - if (!entity.has(WorldContainer.class)) { + if (entity.getComponent(WorldContainer.class) == null) { entity.add(new WorldContainer(syncManager.getPlayer().worldObj)); } - Object[] components = ((IntEntity) entity).getComponentArray(); - for (Object component : components) { + ImmutableArray components = entity.getComponents(); + for (Component component : components) { if (component instanceof WorldStateValidator validator) { validator.load(data.getComponentData()); } @@ -89,7 +89,7 @@ public void readFromNBT(NBTTagCompound nbt) { entity = container.createNewEntity(); entity.add(new WorldContainer(getWorldObj())); entity.add(new Coordinates(xCoord, yCoord, zCoord)); - Object[] components = ((IntEntity) entity).getComponentArray(); + ImmutableArray components = entity.getComponents(); for (Object component : components) { if (component instanceof WorldStateValidator validator) { validator.load(nbt); @@ -100,7 +100,7 @@ public void readFromNBT(NBTTagCompound nbt) { @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - Object[] components = ((IntEntity) entity).getComponentArray(); + ImmutableArray components = entity.getComponents(); for (Object component : components) { if (component instanceof WorldStateValidator validator) { validator.save(nbt); diff --git a/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java b/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java index 551b741..720d44c 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java +++ b/src/main/java/com/gtnewhorizons/mutecore/client/MultiTileBlockRenderer.java @@ -7,6 +7,7 @@ import org.lwjgl.opengl.GL11; +import com.badlogic.ashley.core.Entity; import com.gtnewhorizons.mutecore.api.block.MultiTileEntityBlock; import com.gtnewhorizons.mutecore.api.registry.MultiTileContainer.Id; import com.gtnewhorizons.mutecore.api.registry.MultiTileEntityRegistry; @@ -14,7 +15,6 @@ import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; -import dev.dominion.ecs.api.Entity; public class MultiTileBlockRenderer implements ISimpleBlockRenderingHandler { @@ -51,7 +51,7 @@ public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block b Entity entity = mute.getEntity(); MultiTileEntityRegistry reg = mublock.getRegistry(); reg.getRender( - entity.get(Id.class) + entity.getComponent(Id.class) .getId()) .render(entity, renderer, x, y, z, world); diff --git a/src/main/java/com/gtnewhorizons/mutecore/test/TestRegistry.java b/src/main/java/com/gtnewhorizons/mutecore/test/TestRegistry.java index 9e2356b..177ca27 100644 --- a/src/main/java/com/gtnewhorizons/mutecore/test/TestRegistry.java +++ b/src/main/java/com/gtnewhorizons/mutecore/test/TestRegistry.java @@ -6,6 +6,7 @@ import com.cleanroommc.modularui.utils.Alignment; import com.gtnewhorizons.mutecore.api.block.MultiTileEntityBlock; import com.gtnewhorizons.mutecore.api.item.MultiTileEntityItem; +import com.gtnewhorizons.mutecore.api.registry.ComponentsCreator; import com.gtnewhorizons.mutecore.api.registry.MultiTileEntityRegistry; import com.gtnewhorizons.mutecore.api.tile.MultiTileEntity; @@ -27,10 +28,12 @@ public class TestRegistry implements Runnable { public void run() { TEST_REGISTRY.create(0, MultiTileEntity.class) .gui((entity, syncManager) -> { return new ModularPanel("testOne").align(Alignment.Center); }) + .componentsCreator(new ComponentsCreator().build()) .unlocalizedName("testblockone") .register(); TEST_REGISTRY.create(1, MultiTileEntity.class) .gui((entity, syncManager) -> { return new ModularPanel("testTwo").align(Alignment.BottomCenter); }) + .componentsCreator(new ComponentsCreator().build()) .unlocalizedName("testblocktwo") .register(); }