From fe747833a7276f87757becc872ac59db026c9afc Mon Sep 17 00:00:00 2001 From: warjort Date: Thu, 27 May 2021 11:05:53 +0100 Subject: [PATCH 1/3] Add vanilla dusts to dustRegular --- .../gregtech/api/items/materialitem/MaterialMetaItem.java | 2 +- src/main/java/gregtech/api/unification/ore/OrePrefix.java | 2 ++ src/main/java/gregtech/loaders/OreDictionaryLoader.java | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java mode change 100644 => 100755 src/main/java/gregtech/api/unification/ore/OrePrefix.java mode change 100644 => 100755 src/main/java/gregtech/loaders/OreDictionaryLoader.java diff --git a/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java b/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java old mode 100644 new mode 100755 index ab4ce2fac5..43e5d2c214 --- a/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java +++ b/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java @@ -57,7 +57,7 @@ public void registerOreDict() { ItemStack item = new ItemStack(this, 1, metaItem); OreDictUnifier.registerOre(item, prefix, material); if(prefix.name().equals("dust")) - OreDictUnifier.registerOre(item, "dustRegular", material); + OreDictUnifier.registerOre(item, OrePrefix.DUST_REGULAR, material); items.add(item); } diff --git a/src/main/java/gregtech/api/unification/ore/OrePrefix.java b/src/main/java/gregtech/api/unification/ore/OrePrefix.java old mode 100644 new mode 100755 index 22ff51ae64..b330c01c6a --- a/src/main/java/gregtech/api/unification/ore/OrePrefix.java +++ b/src/main/java/gregtech/api/unification/ore/OrePrefix.java @@ -161,6 +161,8 @@ public enum OrePrefix { circuit("Circuits", -1, null, null, ENABLE_UNIFICATION | DISALLOW_RECYCLING, null), // Introduced by Calclavia chipset("Chipsets", -1, null, null, ENABLE_UNIFICATION | DISALLOW_RECYCLING, null); // Introduced by Buildcraft + public static final String DUST_REGULAR = "dustRegular"; + public static class Flags { public static final long ENABLE_UNIFICATION = GTUtility.createFlag(0); public static final long SELF_REFERENCING = GTUtility.createFlag(1); diff --git a/src/main/java/gregtech/loaders/OreDictionaryLoader.java b/src/main/java/gregtech/loaders/OreDictionaryLoader.java old mode 100644 new mode 100755 index e2e00bf306..02e46c8e5a --- a/src/main/java/gregtech/loaders/OreDictionaryLoader.java +++ b/src/main/java/gregtech/loaders/OreDictionaryLoader.java @@ -67,13 +67,19 @@ public static void init() { OreDictUnifier.registerOre(new ItemStack(Items.IRON_INGOT), OrePrefix.ingot, Materials.Iron); OreDictUnifier.registerOre(new ItemStack(Items.PAPER), OrePrefix.plate, Materials.Paper); OreDictUnifier.registerOre(new ItemStack(Items.SUGAR), OrePrefix.dust, Materials.Sugar); + OreDictUnifier.registerOre(new ItemStack(Items.SUGAR), OrePrefix.DUST_REGULAR, Materials.Sugar); OreDictUnifier.registerOre(new ItemStack(Items.STICK), OrePrefix.stick, Materials.Wood); OreDictUnifier.registerOre(new ItemStack(Items.REDSTONE), OrePrefix.dust, Materials.Redstone); + OreDictUnifier.registerOre(new ItemStack(Items.REDSTONE), OrePrefix.DUST_REGULAR, Materials.Redstone); OreDictUnifier.registerOre(new ItemStack(Items.GUNPOWDER), OrePrefix.dust, Materials.Gunpowder); + OreDictUnifier.registerOre(new ItemStack(Items.GUNPOWDER), OrePrefix.DUST_REGULAR, Materials.Gunpowder); OreDictUnifier.registerOre(new ItemStack(Items.GLOWSTONE_DUST), OrePrefix.dust, Materials.Glowstone); + OreDictUnifier.registerOre(new ItemStack(Items.GLOWSTONE_DUST), OrePrefix.DUST_REGULAR, Materials.Glowstone); OreDictUnifier.registerOre(new ItemStack(Items.DYE, 1, 15), OrePrefix.dust, Materials.Bone); + OreDictUnifier.registerOre(new ItemStack(Items.DYE, 1, 15), OrePrefix.DUST_REGULAR, Materials.Bone); OreDictUnifier.registerOre(new ItemStack(Items.BONE), OrePrefix.stick, Materials.Bone); OreDictUnifier.registerOre(new ItemStack(Items.BLAZE_POWDER), OrePrefix.dust, Materials.Blaze); + OreDictUnifier.registerOre(new ItemStack(Items.BLAZE_POWDER), OrePrefix.DUST_REGULAR, Materials.Blaze); OreDictUnifier.registerOre(new ItemStack(Items.BLAZE_ROD), OrePrefix.stick, Materials.Blaze); OreDictUnifier.registerOre(new ItemStack(Blocks.IRON_BLOCK), OrePrefix.block, Materials.Iron); OreDictUnifier.registerOre(new ItemStack(Blocks.GOLD_BLOCK), OrePrefix.block, Materials.Gold); From ad872d2229959dc229b57ffe4c0c5e4bccba8373 Mon Sep 17 00:00:00 2001 From: warjort Date: Thu, 27 May 2021 11:10:14 +0100 Subject: [PATCH 2/3] Revert "Add vanilla dusts to dustRegular" This reverts commit fe747833a7276f87757becc872ac59db026c9afc. --- .../gregtech/api/items/materialitem/MaterialMetaItem.java | 2 +- src/main/java/gregtech/api/unification/ore/OrePrefix.java | 2 -- src/main/java/gregtech/loaders/OreDictionaryLoader.java | 6 ------ 3 files changed, 1 insertion(+), 9 deletions(-) mode change 100755 => 100644 src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java mode change 100755 => 100644 src/main/java/gregtech/api/unification/ore/OrePrefix.java mode change 100755 => 100644 src/main/java/gregtech/loaders/OreDictionaryLoader.java diff --git a/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java b/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java old mode 100755 new mode 100644 index 43e5d2c214..ab4ce2fac5 --- a/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java +++ b/src/main/java/gregtech/api/items/materialitem/MaterialMetaItem.java @@ -57,7 +57,7 @@ public void registerOreDict() { ItemStack item = new ItemStack(this, 1, metaItem); OreDictUnifier.registerOre(item, prefix, material); if(prefix.name().equals("dust")) - OreDictUnifier.registerOre(item, OrePrefix.DUST_REGULAR, material); + OreDictUnifier.registerOre(item, "dustRegular", material); items.add(item); } diff --git a/src/main/java/gregtech/api/unification/ore/OrePrefix.java b/src/main/java/gregtech/api/unification/ore/OrePrefix.java old mode 100755 new mode 100644 index b330c01c6a..22ff51ae64 --- a/src/main/java/gregtech/api/unification/ore/OrePrefix.java +++ b/src/main/java/gregtech/api/unification/ore/OrePrefix.java @@ -161,8 +161,6 @@ public enum OrePrefix { circuit("Circuits", -1, null, null, ENABLE_UNIFICATION | DISALLOW_RECYCLING, null), // Introduced by Calclavia chipset("Chipsets", -1, null, null, ENABLE_UNIFICATION | DISALLOW_RECYCLING, null); // Introduced by Buildcraft - public static final String DUST_REGULAR = "dustRegular"; - public static class Flags { public static final long ENABLE_UNIFICATION = GTUtility.createFlag(0); public static final long SELF_REFERENCING = GTUtility.createFlag(1); diff --git a/src/main/java/gregtech/loaders/OreDictionaryLoader.java b/src/main/java/gregtech/loaders/OreDictionaryLoader.java old mode 100755 new mode 100644 index 02e46c8e5a..e2e00bf306 --- a/src/main/java/gregtech/loaders/OreDictionaryLoader.java +++ b/src/main/java/gregtech/loaders/OreDictionaryLoader.java @@ -67,19 +67,13 @@ public static void init() { OreDictUnifier.registerOre(new ItemStack(Items.IRON_INGOT), OrePrefix.ingot, Materials.Iron); OreDictUnifier.registerOre(new ItemStack(Items.PAPER), OrePrefix.plate, Materials.Paper); OreDictUnifier.registerOre(new ItemStack(Items.SUGAR), OrePrefix.dust, Materials.Sugar); - OreDictUnifier.registerOre(new ItemStack(Items.SUGAR), OrePrefix.DUST_REGULAR, Materials.Sugar); OreDictUnifier.registerOre(new ItemStack(Items.STICK), OrePrefix.stick, Materials.Wood); OreDictUnifier.registerOre(new ItemStack(Items.REDSTONE), OrePrefix.dust, Materials.Redstone); - OreDictUnifier.registerOre(new ItemStack(Items.REDSTONE), OrePrefix.DUST_REGULAR, Materials.Redstone); OreDictUnifier.registerOre(new ItemStack(Items.GUNPOWDER), OrePrefix.dust, Materials.Gunpowder); - OreDictUnifier.registerOre(new ItemStack(Items.GUNPOWDER), OrePrefix.DUST_REGULAR, Materials.Gunpowder); OreDictUnifier.registerOre(new ItemStack(Items.GLOWSTONE_DUST), OrePrefix.dust, Materials.Glowstone); - OreDictUnifier.registerOre(new ItemStack(Items.GLOWSTONE_DUST), OrePrefix.DUST_REGULAR, Materials.Glowstone); OreDictUnifier.registerOre(new ItemStack(Items.DYE, 1, 15), OrePrefix.dust, Materials.Bone); - OreDictUnifier.registerOre(new ItemStack(Items.DYE, 1, 15), OrePrefix.DUST_REGULAR, Materials.Bone); OreDictUnifier.registerOre(new ItemStack(Items.BONE), OrePrefix.stick, Materials.Bone); OreDictUnifier.registerOre(new ItemStack(Items.BLAZE_POWDER), OrePrefix.dust, Materials.Blaze); - OreDictUnifier.registerOre(new ItemStack(Items.BLAZE_POWDER), OrePrefix.DUST_REGULAR, Materials.Blaze); OreDictUnifier.registerOre(new ItemStack(Items.BLAZE_ROD), OrePrefix.stick, Materials.Blaze); OreDictUnifier.registerOre(new ItemStack(Blocks.IRON_BLOCK), OrePrefix.block, Materials.Iron); OreDictUnifier.registerOre(new ItemStack(Blocks.GOLD_BLOCK), OrePrefix.block, Materials.Gold); From 0fcce7a52718877a0b4858f5d9ea7a31fc2337ef Mon Sep 17 00:00:00 2001 From: warjort Date: Tue, 1 Jun 2021 21:54:34 +0100 Subject: [PATCH 3/3] Defer redstone cache init to the start of the world tick --- .../metatileentity/MetaTileEntityHolder.java | 15 ++++-- .../api/pipenet/tile/TileEntityPipeBase.java | 9 +++- .../gregtech/api/util/FirstTickScheduler.java | 52 +++++++++++++++++++ .../java/gregtech/api/util/FirstTickTask.java | 10 ++++ 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100755 src/main/java/gregtech/api/util/FirstTickScheduler.java create mode 100755 src/main/java/gregtech/api/util/FirstTickTask.java diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntityHolder.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntityHolder.java index 25966e2526..7dcba72e6b 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntityHolder.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntityHolder.java @@ -6,6 +6,8 @@ import gregtech.api.block.machines.BlockMachine; import gregtech.api.cover.CoverBehavior; import gregtech.api.gui.IUIHolder; +import gregtech.api.util.FirstTickScheduler; +import gregtech.api.util.FirstTickTask; import gregtech.api.util.GTControlledRegistry; import gregtech.api.util.GTLog; import net.minecraft.block.state.IBlockState; @@ -25,7 +27,7 @@ import java.util.List; import java.util.stream.Collectors; -public class MetaTileEntityHolder extends TickableTileEntityBase implements IUIHolder { +public class MetaTileEntityHolder extends TickableTileEntityBase implements IUIHolder, FirstTickTask { private MetaTileEntity metaTileEntity; private boolean needToUpdateLightning = false; @@ -215,8 +217,15 @@ public void markAsDirty() { @Override public void onLoad() { super.onLoad(); - if (metaTileEntity != null) { - metaTileEntity.onLoad(); + if (this.metaTileEntity != null) { + FirstTickScheduler.addTask(this); + } + } + + @Override + public void handleFirstTick() { + if (this.metaTileEntity != null) { + this.metaTileEntity.onLoad(); } } diff --git a/src/main/java/gregtech/api/pipenet/tile/TileEntityPipeBase.java b/src/main/java/gregtech/api/pipenet/tile/TileEntityPipeBase.java index bf125b603c..3810ae7dd6 100644 --- a/src/main/java/gregtech/api/pipenet/tile/TileEntityPipeBase.java +++ b/src/main/java/gregtech/api/pipenet/tile/TileEntityPipeBase.java @@ -8,6 +8,8 @@ import gregtech.api.pipenet.WorldPipeNet; import gregtech.api.pipenet.block.BlockPipe; import gregtech.api.pipenet.block.IPipeType; +import gregtech.api.util.FirstTickScheduler; +import gregtech.api.util.FirstTickTask; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; @@ -23,7 +25,7 @@ import javax.annotation.Nullable; import java.util.function.Consumer; -public abstract class TileEntityPipeBase & IPipeType, NodeDataType> extends SyncedTileEntityBase implements IPipeTile { +public abstract class TileEntityPipeBase & IPipeType, NodeDataType> extends SyncedTileEntityBase implements IPipeTile, FirstTickTask { private TIntIntMap blockedConnectionsMap = new TIntIntHashMap(); private int blockedConnections = 0; @@ -283,6 +285,11 @@ public void readFromNBT(NBTTagCompound compound) { @Override public void onLoad() { super.onLoad(); + FirstTickScheduler.addTask(this); + } + + @Override + public void handleFirstTick() { this.coverableImplementation.onLoad(); } diff --git a/src/main/java/gregtech/api/util/FirstTickScheduler.java b/src/main/java/gregtech/api/util/FirstTickScheduler.java new file mode 100755 index 0000000000..bbebc42c93 --- /dev/null +++ b/src/main/java/gregtech/api/util/FirstTickScheduler.java @@ -0,0 +1,52 @@ +package gregtech.api.util; + +import java.util.Map; +import java.util.Queue; + +import com.google.common.collect.Maps; +import com.google.common.collect.Queues; + +import gregtech.api.GTValues; +import net.minecraft.world.World; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.eventhandler.EventPriority; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.TickEvent; + +@EventBusSubscriber(modid = GTValues.MODID) +public class FirstTickScheduler { + + private static Map> tasksByWorld = Maps.newConcurrentMap(); + + public static void addTask(final FirstTickTask task) { + final World world = task.getWorld(); + if (!world.isRemote) { + final Queue tasks = tasksByWorld.computeIfAbsent(world, k -> Queues.newConcurrentLinkedQueue()); + tasks.add(task); + } else { + task.handleFirstTick(); + } + } + + @SubscribeEvent + public static void onWorldUnload(final WorldEvent.Unload event) { + tasksByWorld.remove(event.getWorld()); + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public static void onWorldTick(TickEvent.WorldTickEvent event) { + if (event.phase == TickEvent.Phase.START) { + final Queue tasks = tasksByWorld.get(event.world); + if (tasks == null) { + return; + } + + FirstTickTask task = tasks.poll(); + while (task != null) { + task.handleFirstTick(); + task = tasks.poll(); + } + } + } +} diff --git a/src/main/java/gregtech/api/util/FirstTickTask.java b/src/main/java/gregtech/api/util/FirstTickTask.java new file mode 100755 index 0000000000..918cf8bf87 --- /dev/null +++ b/src/main/java/gregtech/api/util/FirstTickTask.java @@ -0,0 +1,10 @@ +package gregtech.api.util; + +import net.minecraft.world.World; + +public interface FirstTickTask { + + void handleFirstTick(); + + World getWorld(); +} \ No newline at end of file