diff --git a/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java b/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java index 366614a3a..974943196 100644 --- a/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java +++ b/src/main/java/vazkii/botania/api/subtile/SubTileEntity.java @@ -33,20 +33,36 @@ import cpw.mods.fml.relauncher.SideOnly; public class SubTileEntity { protected TileEntity supertile; + + public int ticksExisted = 0; /** The Tag items should use to store which sub tile they are. **/ public static final String TAG_TYPE = "type"; + public static final String TAG_TICKS_EXISTED = "ticksExisted"; public void setSupertile(TileEntity tile) { supertile = tile; } public boolean canUpdate() { - return false; + return true; } - public void onUpdate() { } + public void onUpdate() { + ticksExisted++; + } + public final void writeToPacketNBTInternal(NBTTagCompound cmp) { + cmp.setInteger(TAG_TICKS_EXISTED, ticksExisted); + writeToPacketNBT(cmp); + } + + public final void readFromPacketNBTInternal(NBTTagCompound cmp) { + if(cmp.hasKey(TAG_TICKS_EXISTED)) + ticksExisted = cmp.getInteger(TAG_TICKS_EXISTED); + readFromPacketNBT(cmp); + } + /** * Writes some extra data to a network packet. This data is read * by readFromPacketNBT on the client that receives the packet. diff --git a/src/main/java/vazkii/botania/api/subtile/SubTileFunctional.java b/src/main/java/vazkii/botania/api/subtile/SubTileFunctional.java index 7d95afe79..5f40b5caf 100644 --- a/src/main/java/vazkii/botania/api/subtile/SubTileFunctional.java +++ b/src/main/java/vazkii/botania/api/subtile/SubTileFunctional.java @@ -47,11 +47,6 @@ public class SubTileFunctional extends SubTileEntity { ChunkCoordinates cachedPoolCoordinates = null; - @Override - public boolean canUpdate() { - return true; - } - /** * If set to true, redstoneSignal will be updated every tick. */ diff --git a/src/main/java/vazkii/botania/api/subtile/SubTileGenerating.java b/src/main/java/vazkii/botania/api/subtile/SubTileGenerating.java index edfeabe74..e79771557 100644 --- a/src/main/java/vazkii/botania/api/subtile/SubTileGenerating.java +++ b/src/main/java/vazkii/botania/api/subtile/SubTileGenerating.java @@ -32,7 +32,6 @@ import vazkii.botania.api.mana.IManaCollector; public class SubTileGenerating extends SubTileEntity { private static final String TAG_MANA = "mana"; - private static final String TAG_TICKS_EXISTED = "ticksExisted"; private static final String TAG_COLLECTOR_X = "collectorX"; private static final String TAG_COLLECTOR_Y = "collectorY"; @@ -40,18 +39,12 @@ public class SubTileGenerating extends SubTileEntity { protected int mana; - int ticksExisted = 0; int sizeLastCheck = -1; protected TileEntity linkedCollector = null; public int knownMana = -1; ChunkCoordinates cachedCollectorCoordinates = null; - @Override - public boolean canUpdate() { - return true; - } - @Override public void onUpdate() { super.onUpdate(); @@ -60,7 +53,7 @@ public class SubTileGenerating extends SubTileEntity { if(canGeneratePassively()) { int delay = getDelayBetweenPassiveGeneration(); - if(delay > 0 && supertile.getWorldObj().getWorldTime() % delay == 0) { + if(delay > 0 && ticksExisted % delay == 0) { if(shouldSyncPassiveGeneration()) sync(); addMana(getValueForPassiveGeneration()); diff --git a/src/main/java/vazkii/botania/common/block/subtile/SubTileManastar.java b/src/main/java/vazkii/botania/common/block/subtile/SubTileManastar.java index 96fffe4d6..60d488072 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/SubTileManastar.java +++ b/src/main/java/vazkii/botania/common/block/subtile/SubTileManastar.java @@ -24,13 +24,10 @@ public class SubTileManastar extends SubTileEntity { int manaLastTick = -1; - @Override - public boolean canUpdate() { - return true; - } - @Override public void onUpdate() { + super.onUpdate(); + int mana = 0; for(ForgeDirection dir : LibMisc.CARDINAL_DIRECTIONS) { TileEntity tile = supertile.getWorldObj().getTileEntity(supertile.xCoord + dir.offsetX, supertile.yCoord, supertile.zCoord + dir.offsetZ); @@ -43,7 +40,7 @@ public class SubTileManastar extends SubTileEntity { Botania.proxy.wispFX(supertile.getWorldObj(), supertile.xCoord + 0.55 + Math.random() * 0.2 - 0.1, supertile.yCoord + 0.75 + Math.random() * 0.2 - 0.1, supertile.zCoord + 0.5, more ? 0.05F : 1F, 0.05F, more ? 1F : 0.05F, (float) Math.random() / 7, (float) -Math.random() / 50); } - if(supertile.getWorldObj().getTotalWorldTime() % 60 == 0) + if(ticksExisted % 60 == 0) manaLastTick = mana; } diff --git a/src/main/java/vazkii/botania/common/block/subtile/SubTilePureDaisy.java b/src/main/java/vazkii/botania/common/block/subtile/SubTilePureDaisy.java index da77a9f81..cc2e0d85e 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/SubTilePureDaisy.java +++ b/src/main/java/vazkii/botania/common/block/subtile/SubTilePureDaisy.java @@ -44,13 +44,10 @@ public class SubTilePureDaisy extends SubTileEntity { int positionAt = 0; int[] ticksRemaining = new int[] { 200, 200, 200, 200, 200, 200, 200, 200 }; - @Override - public boolean canUpdate() { - return true; - } - @Override public void onUpdate() { + super.onUpdate(); + positionAt++; if(positionAt == POSITIONS.length) positionAt = 0; diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java index 7093d8977..5194bcb17 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileAgricarnation.java @@ -28,7 +28,7 @@ public class SubTileAgricarnation extends SubTileFunctional { public void onUpdate() { super.onUpdate(); - if(supertile.getWorldObj().getTotalWorldTime() % 6 == 0 && redstoneSignal == 0) { + if(ticksExisted % 6 == 0 && redstoneSignal == 0) { int range = 5; int x = supertile.xCoord + supertile.getWorldObj().rand.nextInt(range * 2 + 1) - range; int z = supertile.zCoord + supertile.getWorldObj().rand.nextInt(range * 2 + 1) - range; diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java index f0b729496..cb4ec43dd 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileBellethorn.java @@ -45,7 +45,7 @@ public class SubTileBellethorn extends SubTileFunctional { final int range = 6; final int manaToUse = getManaCost(); - if(supertile.getWorldObj().getTotalWorldTime() % 5 == 0) { + if(ticksExisted % 5 == 0) { List entities = supertile.getWorldObj().getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(supertile.xCoord - range, supertile.yCoord, supertile.zCoord - range, supertile.xCoord + range, supertile.yCoord + 1, supertile.zCoord + range)); IEntitySelector selector = getSelector(); diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileClayconia.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileClayconia.java index 111869774..e466d1ffe 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileClayconia.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileClayconia.java @@ -30,7 +30,7 @@ public class SubTileClayconia extends SubTileFunctional { public void onUpdate() { super.onUpdate(); - if(!supertile.getWorldObj().isRemote && supertile.getWorldObj().getTotalWorldTime() % 5 == 0) { + if(!supertile.getWorldObj().isRemote && ticksExisted % 5 == 0) { int manaCost = 80; if(mana >= manaCost) { ChunkCoordinates coords = getCoordsToPut(); diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileExoflame.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileExoflame.java index e8a3ecbfa..b860bda13 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileExoflame.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileExoflame.java @@ -48,7 +48,7 @@ public class SubTileExoflame extends SubTileFunctional { BlockFurnace.updateFurnaceBlockState(true, supertile.getWorldObj(), x, y, z); furnace.furnaceBurnTime = 200; } - if(supertile.getWorldObj().getTotalWorldTime() % 2 == 0) + if(ticksExisted % 2 == 0) furnace.furnaceCookTime = Math.min(199, furnace.furnaceCookTime + 1); mana -= 2; @@ -62,7 +62,7 @@ public class SubTileExoflame extends SubTileFunctional { if(heatable.canSmelt() && mana > 2) { if(heatable.getBurnTime() == 0) heatable.boostBurnTime(); - if(supertile.getWorldObj().getTotalWorldTime() % 2 == 0) + if(ticksExisted % 2 == 0) heatable.boostCookTime(); mana -= 2; diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileJadedAmaranthus.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileJadedAmaranthus.java index 462f2df79..d6cf278d2 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileJadedAmaranthus.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileJadedAmaranthus.java @@ -31,7 +31,7 @@ public class SubTileJadedAmaranthus extends SubTileFunctional { if(redstoneSignal > 0) return; - if(mana >= COST && !supertile.getWorldObj().isRemote && supertile.getWorldObj().getTotalWorldTime() % 30 == 0) { + if(mana >= COST && !supertile.getWorldObj().isRemote && ticksExisted % 30 == 0) { int range = 4; int x = supertile.xCoord - range + supertile.getWorldObj().rand.nextInt(range * 2 + 1); int y = supertile.yCoord + range; diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileLoonuim.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileLoonuim.java index 8d60c8b98..44f54cd51 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileLoonuim.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileLoonuim.java @@ -27,7 +27,7 @@ public class SubTileLoonuim extends SubTileFunctional { @Override public void onUpdate() { super.onUpdate(); - if(redstoneSignal == 0 && supertile.getWorldObj().getTotalWorldTime() % 200 == 0 && mana >= COST) { + if(redstoneSignal == 0 && ticksExisted % 200 == 0 && mana >= COST) { Random rand = supertile.getWorldObj().rand; ItemStack stack = ChestGenHooks.getOneItem(ChestGenHooks.DUNGEON_CHEST, rand); EntityItem entity = new EntityItem(supertile.getWorldObj(), supertile.xCoord - 3 + rand.nextInt(7) , supertile.yCoord + 1, supertile.zCoord - 3 + rand.nextInt(7), stack); diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java index 2c65efb4d..78b000c8e 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileRannuncarpus.java @@ -47,7 +47,7 @@ public class SubTileRannuncarpus extends SubTileFunctional { if(redstoneSignal > 0) return; - if(supertile.getWorldObj().getTotalWorldTime() % 10 == 0) { + if(ticksExisted % 10 == 0) { BlockData filter = getUnderlyingBlock(); boolean scanned = false; diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileTangleberrie.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileTangleberrie.java index 880fea9e6..8abb27840 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileTangleberrie.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubTileTangleberrie.java @@ -58,7 +58,7 @@ public class SubTileTangleberrie extends SubTileFunctional { } } - if(supertile.getWorldObj().getTotalWorldTime() % 4 == 0) { + if(ticksExisted % 4 == 0) { mana--; sync(); } diff --git a/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java b/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java index 5c145cba8..b028c66dc 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java +++ b/src/main/java/vazkii/botania/common/block/subtile/functional/SubtileOrechid.java @@ -38,7 +38,7 @@ public class SubtileOrechid extends SubTileFunctional { if(redstoneSignal > 0) return; - if(!supertile.getWorldObj().isRemote && mana >= COST && supertile.getWorldObj().getTotalWorldTime() % 100 == 0) { + if(!supertile.getWorldObj().isRemote && mana >= COST && ticksExisted % 100 == 0) { ChunkCoordinates coords = getCoordsToPut(); if(coords != null) { ItemStack stack = getOreToPut(); diff --git a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileDaybloom.java b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileDaybloom.java index adc7aac34..bc99a8b1b 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileDaybloom.java +++ b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileDaybloom.java @@ -60,7 +60,7 @@ public class SubTileDaybloom extends SubTileGenerating { float b = color.getBlue() / 255F; float m = 0.045F; - if(supertile.getWorldObj().getTotalWorldTime() % 10 == 0) + if(ticksExisted % 10 == 0) Botania.proxy.wispFX(supertile.getWorldObj(), supertile.xCoord + 0.5, supertile.yCoord + 0.05, supertile.zCoord + 0.5, r, g, b, 0.1F, dir.offsetX * m, dir.offsetY * m, dir.offsetZ * m); } } diff --git a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileHydroangeas.java b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileHydroangeas.java index d59acfac1..2467e9549 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileHydroangeas.java +++ b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileHydroangeas.java @@ -33,7 +33,7 @@ public class SubTileHydroangeas extends SubTileGenerating { boolean didSomething = false; if(burnTime == 0) { - if(supertile.getWorldObj().getWorldTime() % 40L == 0) + if(ticksExisted % 40L == 0) if(mana < getMaxMana() && !supertile.getWorldObj().isRemote) { Random random = new Random(); int randomInt = random.nextInt(3); diff --git a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileKekimurus.java b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileKekimurus.java index 98418d483..a981883a4 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileKekimurus.java +++ b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileKekimurus.java @@ -25,7 +25,7 @@ public class SubTileKekimurus extends SubTileGenerating { int mana = 640; - if(getMaxMana() - this.mana >= mana && !supertile.getWorldObj().isRemote && supertile.getWorldObj().getTotalWorldTime() % 50 == 0) { + if(getMaxMana() - this.mana >= mana && !supertile.getWorldObj().isRemote && ticksExisted % 50 == 0) { int range = 5; for(int i = 0; i < range * 2 + 1; i++) for(int j = 0; j < range * 2 + 1; j++) diff --git a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileMunchdew.java b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileMunchdew.java index 19f9e576c..097a403ea 100644 --- a/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileMunchdew.java +++ b/src/main/java/vazkii/botania/common/block/subtile/generating/SubTileMunchdew.java @@ -31,7 +31,7 @@ public class SubTileMunchdew extends SubTileGenerating { super.onUpdate(); int manaPerLeaf = 16; - if(getMaxMana() - mana >= manaPerLeaf && !supertile.getWorldObj().isRemote && supertile.getWorldObj().getTotalWorldTime() % 4 == 0) { + if(getMaxMana() - mana >= manaPerLeaf && !supertile.getWorldObj().isRemote && ticksExisted % 4 == 0) { List coords = new ArrayList(); int range = 8; int rangeY = 16; diff --git a/src/main/java/vazkii/botania/common/block/tile/TilePylon.java b/src/main/java/vazkii/botania/common/block/tile/TilePylon.java index 507007598..87427f193 100644 --- a/src/main/java/vazkii/botania/common/block/tile/TilePylon.java +++ b/src/main/java/vazkii/botania/common/block/tile/TilePylon.java @@ -25,9 +25,11 @@ public class TilePylon extends TileEntity { boolean activated = false; int centerX, centerY, centerZ; + int ticks = 0; @Override public void updateEntity() { + ++ticks; int meta = getBlockMetadata(); if(activated && worldObj.isRemote) { @@ -40,7 +42,7 @@ public class TilePylon extends TileEntity { if(meta == 1) { if(ConfigHandler.elfPortalParticlesEnabled) { - double worldTime = (int) worldObj.getTotalWorldTime(); + double worldTime = ticks; worldTime += new Random(xCoord ^ yCoord ^ zCoord).nextInt(1000); worldTime /= 5; diff --git a/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java b/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java index 7604bc857..e349f701e 100644 --- a/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java +++ b/src/main/java/vazkii/botania/common/block/tile/TileSpecialFlower.java @@ -103,7 +103,7 @@ public class TileSpecialFlower extends TileMod implements IWandBindable, ISubTil cmp.setTag(TAG_SUBTILE_CMP, subCmp); if(subTile != null) - subTile.writeToPacketNBT(subCmp); + subTile.readFromPacketNBTInternal(subCmp); } @Override @@ -117,7 +117,7 @@ public class TileSpecialFlower extends TileMod implements IWandBindable, ISubTil provideSubTile(subTileName); if(subTile != null) - subTile.readFromPacketNBT(subCmp); + subTile.readFromPacketNBTInternal(subCmp); } public IIcon getIcon() { diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemAuraRing.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemAuraRing.java index cfb31251f..44dda56d5 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemAuraRing.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemAuraRing.java @@ -27,7 +27,7 @@ public class ItemAuraRing extends ItemBauble { @Override public void onWornTick(ItemStack stack, EntityLivingBase player) { super.onWornTick(stack, player); - if(player instanceof EntityPlayer && player.worldObj.getTotalWorldTime() % 2 == 0) + if(player instanceof EntityPlayer && player.ticksExisted % 2 == 0) ManaItemHandler.dispatchManaExact(stack, (EntityPlayer) player, 1, true); } diff --git a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGreaterAuraRing.java b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGreaterAuraRing.java index 1c8f9df69..6428d9f92 100644 --- a/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGreaterAuraRing.java +++ b/src/main/java/vazkii/botania/common/item/equipment/bauble/ItemGreaterAuraRing.java @@ -28,7 +28,7 @@ public class ItemGreaterAuraRing extends ItemBauble { public void onWornTick(ItemStack stack, EntityLivingBase player) { super.onWornTick(stack, player); if(player instanceof EntityPlayer) - ManaItemHandler.dispatchManaExact(stack, (EntityPlayer) player, player.worldObj.getTotalWorldTime() % 3 == 0 ? 2 : 1, true); + ManaItemHandler.dispatchManaExact(stack, (EntityPlayer) player, player.ticksExisted % 3 == 0 ? 2 : 1, true); } @Override diff --git a/src/main/java/vazkii/botania/common/lexicon/page/PagePetalRecipe.java b/src/main/java/vazkii/botania/common/lexicon/page/PagePetalRecipe.java index 44a4a294d..3b1c281f7 100644 --- a/src/main/java/vazkii/botania/common/lexicon/page/PagePetalRecipe.java +++ b/src/main/java/vazkii/botania/common/lexicon/page/PagePetalRecipe.java @@ -27,6 +27,7 @@ import vazkii.botania.api.internal.IGuiLexiconEntry; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.lexicon.LexiconRecipeMappings; import vazkii.botania.api.recipe.RecipePetals; +import vazkii.botania.client.core.handler.ClientTickHandler; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.block.ModBlocks; import vazkii.botania.common.core.handler.ConfigHandler; @@ -67,7 +68,7 @@ public class PagePetalRecipe extends PageRecipe { List inputs = recipe.getInputs(); int degreePerInput = (int) (360F / inputs.size()); - int currentDegree = ConfigHandler.lexiconRotatingItems ? (int) Minecraft.getMinecraft().theWorld.getTotalWorldTime() : 0; + int currentDegree = ConfigHandler.lexiconRotatingItems ? (int) ClientTickHandler.ticksInGame : 0; for(Object obj : inputs) { Object input = obj;