geforkt von Mirrors/Paper
b00de5f176
Added newlines at the end of files Fixed improper line endings on some files Matched start - end comments Added some missing comments for diffs Fixed syntax on some spots Minimized some diff Removed some no longer used files Added comment on some required files with no changes Fixed imports of items used once Added imports for items used more than once
173 Zeilen
5.5 KiB
Java
173 Zeilen
5.5 KiB
Java
package net.minecraft.server;
|
|
|
|
import java.util.Random;
|
|
|
|
// CraftBukkit start
|
|
import org.bukkit.event.entity.EntityPortalEnterEvent;
|
|
import org.bukkit.event.world.PortalCreateEvent;
|
|
// CraftBukkit end
|
|
|
|
public class BlockPortal extends BlockHalfTransparant {
|
|
|
|
public BlockPortal(int i, int j) {
|
|
super(i, j, Material.PORTAL, false);
|
|
}
|
|
|
|
public AxisAlignedBB e(World world, int i, int j, int k) {
|
|
return null;
|
|
}
|
|
|
|
public void updateShape(IBlockAccess iblockaccess, int i, int j, int k) {
|
|
float f;
|
|
float f1;
|
|
|
|
if (iblockaccess.getTypeId(i - 1, j, k) != this.id && iblockaccess.getTypeId(i + 1, j, k) != this.id) {
|
|
f = 0.125F;
|
|
f1 = 0.5F;
|
|
this.a(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, 1.0F, 0.5F + f1);
|
|
} else {
|
|
f = 0.5F;
|
|
f1 = 0.125F;
|
|
this.a(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, 1.0F, 0.5F + f1);
|
|
}
|
|
}
|
|
|
|
public boolean a() {
|
|
return false;
|
|
}
|
|
|
|
public boolean b() {
|
|
return false;
|
|
}
|
|
|
|
public boolean b_(World world, int i, int j, int k) {
|
|
byte b0 = 0;
|
|
byte b1 = 0;
|
|
|
|
if (world.getTypeId(i - 1, j, k) == Block.OBSIDIAN.id || world.getTypeId(i + 1, j, k) == Block.OBSIDIAN.id) {
|
|
b0 = 1;
|
|
}
|
|
|
|
if (world.getTypeId(i, j, k - 1) == Block.OBSIDIAN.id || world.getTypeId(i, j, k + 1) == Block.OBSIDIAN.id) {
|
|
b1 = 1;
|
|
}
|
|
|
|
if (b0 == b1) {
|
|
return false;
|
|
} else {
|
|
// CraftBukkit start
|
|
java.util.Collection<org.bukkit.block.Block> blocks = new java.util.HashSet<org.bukkit.block.Block>();
|
|
org.bukkit.World bworld = world.getWorld();
|
|
// CraftBukkit end
|
|
|
|
if (world.getTypeId(i - b0, j, k - b1) == 0) {
|
|
i -= b0;
|
|
k -= b1;
|
|
}
|
|
|
|
int l;
|
|
int i1;
|
|
|
|
for (l = -1; l <= 2; ++l) {
|
|
for (i1 = -1; i1 <= 3; ++i1) {
|
|
boolean flag = l == -1 || l == 2 || i1 == -1 || i1 == 3;
|
|
|
|
if (l != -1 && l != 2 || i1 != -1 && i1 != 3) {
|
|
int j1 = world.getTypeId(i + b0 * l, j + i1, k + b1 * l);
|
|
|
|
if (flag) {
|
|
if (j1 != Block.OBSIDIAN.id) {
|
|
return false;
|
|
} else { // CraftBukkit
|
|
blocks.add(bworld.getBlockAt(i + b0 * l, j + i1, k + b1 * l)); // CraftBukkit
|
|
}
|
|
} else if (j1 != 0 && j1 != Block.FIRE.id) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// CraftBukkit start
|
|
for (l = 0; l < 2; ++l) {
|
|
for (i1 = 0; i1 < 3; ++i1) {
|
|
blocks.add(bworld.getBlockAt(i + b0 * l, j + i1, k + b1 * l));
|
|
}
|
|
}
|
|
|
|
PortalCreateEvent event = new PortalCreateEvent(blocks, bworld, PortalCreateEvent.CreateReason.FIRE);
|
|
world.getServer().getPluginManager().callEvent(event);
|
|
|
|
if (event.isCancelled()) {
|
|
return false;
|
|
}
|
|
// CraftBukkit end
|
|
|
|
world.suppressPhysics = true;
|
|
|
|
for (l = 0; l < 2; ++l) {
|
|
for (i1 = 0; i1 < 3; ++i1) {
|
|
world.setTypeId(i + b0 * l, j + i1, k + b1 * l, Block.PORTAL.id);
|
|
}
|
|
}
|
|
|
|
world.suppressPhysics = false;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
public void doPhysics(World world, int i, int j, int k, int l) {
|
|
byte b0 = 0;
|
|
byte b1 = 1;
|
|
|
|
if (world.getTypeId(i - 1, j, k) == this.id || world.getTypeId(i + 1, j, k) == this.id) {
|
|
b0 = 1;
|
|
b1 = 0;
|
|
}
|
|
|
|
int i1;
|
|
|
|
for (i1 = j; world.getTypeId(i, i1 - 1, k) == this.id; --i1) {
|
|
;
|
|
}
|
|
|
|
if (world.getTypeId(i, i1 - 1, k) != Block.OBSIDIAN.id) {
|
|
world.setTypeId(i, j, k, 0);
|
|
} else {
|
|
int j1;
|
|
|
|
for (j1 = 1; j1 < 4 && world.getTypeId(i, i1 + j1, k) == this.id; ++j1) {
|
|
;
|
|
}
|
|
|
|
if (j1 == 3 && world.getTypeId(i, i1 + j1, k) == Block.OBSIDIAN.id) {
|
|
boolean flag = world.getTypeId(i - 1, j, k) == this.id || world.getTypeId(i + 1, j, k) == this.id;
|
|
boolean flag1 = world.getTypeId(i, j, k - 1) == this.id || world.getTypeId(i, j, k + 1) == this.id;
|
|
|
|
if (flag && flag1) {
|
|
world.setTypeId(i, j, k, 0);
|
|
} else if ((world.getTypeId(i + b0, j, k + b1) != Block.OBSIDIAN.id || world.getTypeId(i - b0, j, k - b1) != this.id) && (world.getTypeId(i - b0, j, k - b1) != Block.OBSIDIAN.id || world.getTypeId(i + b0, j, k + b1) != this.id)) {
|
|
world.setTypeId(i, j, k, 0);
|
|
}
|
|
} else {
|
|
world.setTypeId(i, j, k, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
public int a(Random random) {
|
|
return 0;
|
|
}
|
|
|
|
public void a(World world, int i, int j, int k, Entity entity) {
|
|
if (entity.vehicle == null && entity.passenger == null) {
|
|
// CraftBukkit start - Entity in portal
|
|
EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), i, j, k));
|
|
world.getServer().getPluginManager().callEvent(event);
|
|
// CraftBukkit end
|
|
|
|
entity.ad();
|
|
}
|
|
}
|
|
}
|