From 6543b76feaf60af9d32c6e681b6c237368e6a383 Mon Sep 17 00:00:00 2001 From: Robotia Date: Thu, 28 Jan 2016 20:07:06 -0500 Subject: [PATCH] Fix #40 --- .../block/BlockRedstoneDiode.java.patch | 30 ++++++++----------- .../block/BlockRedstoneTorch.java.patch | 27 +++++++++-------- .../configuration/CauldronConfig.java | 11 +++++-- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/patches/net/minecraft/block/BlockRedstoneDiode.java.patch b/patches/net/minecraft/block/BlockRedstoneDiode.java.patch index 2c0a7e8..0193470 100644 --- a/patches/net/minecraft/block/BlockRedstoneDiode.java.patch +++ b/patches/net/minecraft/block/BlockRedstoneDiode.java.patch @@ -1,35 +1,37 @@ --- ../src-base/minecraft/net/minecraft/block/BlockRedstoneDiode.java +++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneDiode.java -@@ -13,16 +13,19 @@ +@@ -13,16 +13,22 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit ++ ++import net.minecraftforge.cauldron.configuration.CauldronConfig; + public abstract class BlockRedstoneDiode extends BlockDirectional { protected final boolean isRepeaterPowered; private static final String __OBFID = "CL_00000226"; -- -+private boolean limit; ++ private boolean limit; + protected BlockRedstoneDiode(boolean p_i45400_1_) { super(Material.circuits); this.isRepeaterPowered = p_i45400_1_; this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); -+if(this.getClass().getSimpleName().toLowerCase().contains("redstonerepeater"))limit = true; ++ if(this.getClass().getSimpleName().toLowerCase().contains("redstonerepeater"))limit = true; } public boolean renderAsNormalBlock() -@@ -39,27 +42,45 @@ - { +@@ -40,22 +46,37 @@ return !World.doesBlockHaveSolidTopSurface(p_149718_1_, p_149718_2_, p_149718_3_ - 1, p_149718_4_) ? false : super.canBlockStay(p_149718_1_, p_149718_2_, p_149718_3_, p_149718_4_); } -- -+boolean state = false; -+long last = 0L; + ++ private long last = 0L; public void updateTick(World p_149674_1_, int p_149674_2_, int p_149674_3_, int p_149674_4_, Random p_149674_5_) { ++ if (System.currentTimeMillis() - last <= CauldronConfig.instance.repeaterL.getValue()) { return; } ++ last = System.currentTimeMillis(); int l = p_149674_1_.getBlockMetadata(p_149674_2_, p_149674_3_, p_149674_4_); - if (!this.func_149910_g(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, l)) @@ -44,11 +46,9 @@ + { + return; + } -+if(limit && System.currentTimeMillis() - last <= 150)return; + + // CraftBukkit end p_149674_1_.setBlock(p_149674_2_, p_149674_3_, p_149674_4_, this.getBlockUnpowered(), l, 2); -+last = System.currentTimeMillis(); } else if (!this.isRepeaterPowered) { @@ -57,18 +57,12 @@ + { + return; + } -+if(limit && System.currentTimeMillis() - last <= 150)return; + // CraftBukkit end p_149674_1_.setBlock(p_149674_2_, p_149674_3_, p_149674_4_, this.getBlockPowered(), l, 2); - +- if (!flag) { p_149674_1_.scheduleBlockUpdateWithPriority(p_149674_2_, p_149674_3_, p_149674_4_, this.getBlockPowered(), this.func_149899_k(l), -1); - } -+last = System.currentTimeMillis(); - } - } - } @@ -315,4 +336,4 @@ { return this.func_149907_e(p_149667_1_); diff --git a/patches/net/minecraft/block/BlockRedstoneTorch.java.patch b/patches/net/minecraft/block/BlockRedstoneTorch.java.patch index e7afdc8..cd602dd 100644 --- a/patches/net/minecraft/block/BlockRedstoneTorch.java.patch +++ b/patches/net/minecraft/block/BlockRedstoneTorch.java.patch @@ -1,23 +1,30 @@ --- ../src-base/minecraft/net/minecraft/block/BlockRedstoneTorch.java +++ ../src-work/minecraft/net/minecraft/block/BlockRedstoneTorch.java -@@ -13,6 +13,8 @@ +@@ -13,6 +13,10 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit ++ ++import net.minecraftforge.cauldron.configuration.CauldronConfig; + public class BlockRedstoneTorch extends BlockTorch { private boolean field_150113_a; -@@ -114,6 +116,7 @@ - int l = p_150110_1_.getBlockMetadata(p_150110_2_, p_150110_3_, p_150110_4_); +@@ -115,8 +119,12 @@ return l == 5 && p_150110_1_.getIndirectPowerOutput(p_150110_2_, p_150110_3_ - 1, p_150110_4_, 0) ? true : (l == 3 && p_150110_1_.getIndirectPowerOutput(p_150110_2_, p_150110_3_, p_150110_4_ - 1, 2) ? true : (l == 4 && p_150110_1_.getIndirectPowerOutput(p_150110_2_, p_150110_3_, p_150110_4_ + 1, 3) ? true : (l == 1 && p_150110_1_.getIndirectPowerOutput(p_150110_2_ - 1, p_150110_3_, p_150110_4_, 4) ? true : l == 2 && p_150110_1_.getIndirectPowerOutput(p_150110_2_ + 1, p_150110_3_, p_150110_4_, 5)))); } -+long last = 0L; ++ private long last = 0L; ++ public void updateTick(World p_149674_1_, int p_149674_2_, int p_149674_3_, int p_149674_4_, Random p_149674_5_) { -@@ -125,11 +128,33 @@ ++ if (System.currentTimeMillis() - last <= CauldronConfig.instance.redstoneTorchL.getValue()) { return; } ++ last = System.currentTimeMillis(); + boolean flag = this.func_150110_m(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_); + List list = (List)field_150112_b.get(p_149674_1_); + +@@ -125,10 +133,30 @@ list.remove(0); } @@ -45,13 +52,10 @@ + } + + // CraftBukkit end -+ if(System.currentTimeMillis() - last <= 150) return; p_149674_1_.setBlock(p_149674_2_, p_149674_3_, p_149674_4_, Blocks.unlit_redstone_torch, p_149674_1_.getBlockMetadata(p_149674_2_, p_149674_3_, p_149674_4_), 3); -+ last = System.currentTimeMillis(); if (this.func_150111_a(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, true)) - { -@@ -147,7 +172,22 @@ +@@ -147,6 +175,19 @@ } else if (!flag && !this.func_150111_a(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, false)) { @@ -68,13 +72,10 @@ + } + + // CraftBukkit end -+ if(System.currentTimeMillis() - last <= 150) return; p_149674_1_.setBlock(p_149674_2_, p_149674_3_, p_149674_4_, Blocks.redstone_torch, p_149674_1_.getBlockMetadata(p_149674_2_, p_149674_3_, p_149674_4_), 3); -+ last = System.currentTimeMillis(); } } - -@@ -241,4 +281,4 @@ +@@ -241,4 +282,4 @@ this.field_150844_d = p_i45422_4_; } } diff --git a/src/main/java/net/minecraftforge/cauldron/configuration/CauldronConfig.java b/src/main/java/net/minecraftforge/cauldron/configuration/CauldronConfig.java index 91bdbc4..7476159 100644 --- a/src/main/java/net/minecraftforge/cauldron/configuration/CauldronConfig.java +++ b/src/main/java/net/minecraftforge/cauldron/configuration/CauldronConfig.java @@ -14,7 +14,7 @@ public class CauldronConfig extends ConfigBase + "\n" + "IRC: #cauldron @ irc.esper.net ( http://webchat.esper.net/?channel=cauldron )\n" + "Forums: http://cauldron.minecraftforge.net/\n"; - + public static CauldronConfig instance; /* ======================================================================== */ // Logging options @@ -57,6 +57,10 @@ public class CauldronConfig extends ConfigBase public final BoolSetting fakePlayerLogin = new BoolSetting(this, "fake-players.do-login", false, "Raise login events for fake players"); public final IntSetting maxPlayersVisible = new IntSetting(this, "world-settings.max-players-visible", -1, "How many players will visible in the tab list"); + // Optimization options + public final IntSetting repeaterL = new IntSetting(this, "optimized.redstone-repeater-update-speed", -1, "How many ticks the server can skip for repeater updates"); + public final IntSetting redstoneTorchL = new IntSetting(this, "optimized.redstone-redstoneTorch-update-speed", -1, "How many ticks the server can skip for redstoneTorch updates"); + // Plug-in options public final BoolSetting remapPluginFile = new BoolSetting(this, "plugin-settings.default.remap-plugin-file", false, "Remap the plugin file (dev)"); @@ -66,6 +70,7 @@ public class CauldronConfig extends ConfigBase { super(fileName, commandName); init(); + instance = this; } public void init() @@ -101,7 +106,9 @@ public class CauldronConfig extends ConfigBase settings.put(userLogin.path, userLogin); settings.put(allowTntPunishment.path, allowTntPunishment); settings.put(maxPlayersVisible.path, maxPlayersVisible); - settings.put(chunkGCGracePeriod.path,chunkGCGracePeriod); + settings.put(chunkGCGracePeriod.path, chunkGCGracePeriod); + settings.put(repeaterL.path, repeaterL); + settings.put(redstoneTorchL.path, redstoneTorchL); load(); }