3
0

Add TNT punishment option (enabled by default) (fix #21)

This commit is contained in:
Prototik 2015-05-22 11:24:39 +07:00
parent b2167a697a
commit d7977dd94b
2 changed files with 25 additions and 8 deletions

View File

@ -1,9 +1,24 @@
--- ../src-base/minecraft/net/minecraft/world/Explosion.java --- ../src-base/minecraft/net/minecraft/world/Explosion.java
+++ ../src-work/minecraft/net/minecraft/world/Explosion.java +++ ../src-work/minecraft/net/minecraft/world/Explosion.java
@@ -20,6 +20,12 @@ @@ -7,6 +7,7 @@
import java.util.List;
import java.util.Map;
import java.util.Random;
+
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.enchantment.EnchantmentProtection;
@@ -15,11 +16,19 @@
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
+import net.minecraft.server.MinecraftServer;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.util.Vec3; import net.minecraft.util.Vec3;
+
+// CraftBukkit start +// CraftBukkit start
+import org.bukkit.craftbukkit.event.CraftEventFactory; +import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.entity.EntityExplodeEvent; +import org.bukkit.event.entity.EntityExplodeEvent;
@ -13,7 +28,7 @@
public class Explosion public class Explosion
{ {
public boolean isFlaming; public boolean isFlaming;
@@ -34,6 +40,7 @@ @@ -34,6 +43,7 @@
public float explosionSize; public float explosionSize;
public List affectedBlockPositions = new ArrayList(); public List affectedBlockPositions = new ArrayList();
private Map field_77288_k = new HashMap(); private Map field_77288_k = new HashMap();
@ -21,7 +36,7 @@
private static final String __OBFID = "CL_00000134"; private static final String __OBFID = "CL_00000134";
public Explosion(World p_i1948_1_, Entity p_i1948_2_, double p_i1948_3_, double p_i1948_5_, double p_i1948_7_, float p_i1948_9_) public Explosion(World p_i1948_1_, Entity p_i1948_2_, double p_i1948_3_, double p_i1948_5_, double p_i1948_7_, float p_i1948_9_)
@@ -48,6 +55,12 @@ @@ -48,6 +58,12 @@
public void doExplosionA() public void doExplosionA()
{ {
@ -34,7 +49,7 @@
float f = this.explosionSize; float f = this.explosionSize;
HashSet hashset = new HashSet(); HashSet hashset = new HashSet();
int i; int i;
@@ -135,7 +148,15 @@ @@ -135,7 +151,15 @@
d7 /= d9; d7 /= d9;
double d10 = (double)this.worldObj.getBlockDensity(vec3, entity.boundingBox); double d10 = (double)this.worldObj.getBlockDensity(vec3, entity.boundingBox);
double d11 = (1.0D - d4) * d10; double d11 = (1.0D - d4) * d10;
@ -45,13 +60,13 @@
+ * (double) this.explosionSize + 1.0D)))) + * (double) this.explosionSize + 1.0D))))
+ { + {
+ CraftEventFactory.entityDamage = null; + CraftEventFactory.entityDamage = null;
+ continue;
+ } + }
+ if (!MinecraftServer.cauldronConfig.allowTntPunishment.getValue()) continue;
+ // CraftBukkit end + // CraftBukkit end
double d8 = EnchantmentProtection.func_92092_a(entity, d11); double d8 = EnchantmentProtection.func_92092_a(entity, d11);
entity.motionX += d5 * d8; entity.motionX += d5 * d8;
entity.motionY += d6 * d8; entity.motionY += d6 * d8;
@@ -174,6 +195,39 @@ @@ -174,6 +198,39 @@
if (this.isSmoking) if (this.isSmoking)
{ {
@ -91,7 +106,7 @@
iterator = this.affectedBlockPositions.iterator(); iterator = this.affectedBlockPositions.iterator();
while (iterator.hasNext()) while (iterator.hasNext())
@@ -209,7 +263,8 @@ @@ -209,7 +266,8 @@
{ {
if (block.canDropFromExplosion(this)) if (block.canDropFromExplosion(this))
{ {
@ -101,7 +116,7 @@
} }
block.onBlockExploded(this.worldObj, i, j, k, this); block.onBlockExploded(this.worldObj, i, j, k, this);
@@ -232,7 +287,12 @@ @@ -232,7 +290,12 @@
if (block.getMaterial() == Material.air && block1.func_149730_j() && this.explosionRNG.nextInt(3) == 0) if (block.getMaterial() == Material.air && block1.func_149730_j() && this.explosionRNG.nextInt(3) == 0)
{ {

View File

@ -51,6 +51,7 @@ public class CauldronConfig extends ConfigBase
// Server options // Server options
public final BoolSetting infiniteWaterSource = new BoolSetting(this, "world-settings.default.infinite-water-source", true, "Vanilla water source behavior - is infinite"); public final BoolSetting infiniteWaterSource = new BoolSetting(this, "world-settings.default.infinite-water-source", true, "Vanilla water source behavior - is infinite");
public final BoolSetting flowingLavaDecay = new BoolSetting(this, "world-settings.default.flowing-lava-decay", false, "Lava behaves like vanilla water when source block is removed"); public final BoolSetting flowingLavaDecay = new BoolSetting(this, "world-settings.default.flowing-lava-decay", false, "Lava behaves like vanilla water when source block is removed");
public final BoolSetting allowTntPunishment = new BoolSetting(this, "world-settings.default.allow-tnt-punishment", true, "TNT ability to push other entities (including other TNTs)");
public final BoolSetting fakePlayerLogin = new BoolSetting(this, "fake-players.do-login", false, "Raise login events for fake players"); public final BoolSetting fakePlayerLogin = new BoolSetting(this, "fake-players.do-login", false, "Raise login events for fake players");
// Plug-in options // Plug-in options
@ -95,6 +96,7 @@ public class CauldronConfig extends ConfigBase
settings.put(fakePlayerLogin.path, fakePlayerLogin); settings.put(fakePlayerLogin.path, fakePlayerLogin);
settings.put(remapPluginFile.path, remapPluginFile); settings.put(remapPluginFile.path, remapPluginFile);
settings.put(userLogin.path, userLogin); settings.put(userLogin.path, userLogin);
settings.put(allowTntPunishment.path, allowTntPunishment);
load(); load();
} }