3
0
Mirror von https://github.com/PaperMC/Paper.git synchronisiert 2024-12-19 13:00:06 +01:00

Maintain old setType method in WorldGenerator. Fixes BUKKIT-4915

WorldGenerator setType and setTypeAndData have their arguments changed to
add in support for CraftBlockChangeDelegate, which changes the method
signature. This change in the method signature breaks any WorldGenerators
that aren't modified to use CraftBlockChangeDelegate.

This commit fixes the issue by readding the old method and maintaining the
CraftBlockChangeDelegate method.  This makes it so that there is a
compatible method for both  CraftBlockChangeDelegate WorldGenerators and
unmodified WorldGenerators.

Additionally, this commit reduces and corrects the diffs in
WorldGenerator, moving the fix for layering violations to
CraftBlockChangeDelegate.
Dieser Commit ist enthalten in:
Nate Mortensen 2013-12-02 19:41:51 -07:00
Ursprung a721fe8473
Commit 39719fff74
2 geänderte Dateien mit 26 neuen und 12 gelöschten Zeilen

Datei anzeigen

@ -20,23 +20,31 @@ public abstract class WorldGenerator {
public void a(double d0, double d1, double d2) {} public void a(double d0, double d1, double d2) {}
// CraftBukkit - change signature protected void setType(World world, int i, int j, int k, Block block) {
protected void setType(CraftBlockChangeDelegate world, int i, int j, int k, Block block) {
this.setTypeAndData(world, i, j, k, block, 0); this.setTypeAndData(world, i, j, k, block, 0);
} }
// CraftBukkit - change signature // CraftBukkit start - Duplicate method to add support for CraftBlockChangeDelegate
protected void setType(CraftBlockChangeDelegate world, int i, int j, int k, Block block) {
this.setTypeAndData(world, i, j, k, block, 0);
}
// CraftBukkit end
protected void setTypeAndData(World world, int i, int j, int k, Block block, int l) {
if (this.a) {
world.setTypeAndData(i, j, k, block, l, 3);
} else {
world.setTypeAndData(i, j, k, block, l, 2);
}
}
// CraftBukkit start - Duplicate method to add support for CraftBlockChangeDelegate
protected void setTypeAndData(CraftBlockChangeDelegate world, int i, int j, int k, Block block, int l) { protected void setTypeAndData(CraftBlockChangeDelegate world, int i, int j, int k, Block block, int l) {
if (this.a) { if (this.a) {
world.setTypeAndData(i, j, k, block, l, 3); world.setTypeAndData(i, j, k, block, l, 3);
} else { } else {
// CraftBukkit start - Layering violation :( world.setTypeAndData(i, j, k, block, l, 2);
if (world.getDelegate() instanceof World) {
((World) world.getDelegate()).setTypeAndData(i, j, k, block, l, 2);
} else {
world.setTypeAndData(i, j, k, block, l, 2);
}
// CraftBukkit end
} }
} }
// CraftBukkit end
} }

Datei anzeigen

@ -1,6 +1,7 @@
package org.bukkit.craftbukkit; package org.bukkit.craftbukkit;
import net.minecraft.server.Block; import net.minecraft.server.Block;
import net.minecraft.server.World;
import org.bukkit.BlockChangeDelegate; import org.bukkit.BlockChangeDelegate;
@ -19,8 +20,13 @@ public class CraftBlockChangeDelegate {
return Block.e(this.delegate.getTypeId(x, y, z)); return Block.e(this.delegate.getTypeId(x, y, z));
} }
public void setTypeAndData(int x, int y, int z, Block block, int data, int light) { public void setTypeAndData(int x, int y, int z, Block block, int data, int updateFlag) {
delegate.setRawTypeIdAndData(x, y, z, Block.b(block), data); // Layering violation :(
if (delegate instanceof World) {
((World) delegate).setTypeAndData(x, y, z, block, data, 2);
} else {
delegate.setRawTypeIdAndData(x, y, z, Block.b(block), data);
}
} }
public boolean isEmpty(int x, int y, int z) { public boolean isEmpty(int x, int y, int z) {