net.minecraft.server.Village Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of chest-server Show documentation
Show all versions of chest-server Show documentation
A spigot fork to kotlin structure and news.
The newest version!
package net.minecraft.server;
import com.google.common.collect.Lists;
import com.mojang.authlib.GameProfile;
import java.util.Iterator;
import java.util.List;
import java.util.TreeMap;
import java.util.UUID;
public class Village {
private final List b = Lists.newArrayList();
private World a;
private BlockPosition c;
private BlockPosition d;
private int e;
private int f;
private int g;
private int h;
private int i;
private final TreeMap j;
private final List k;
private int l;
public Village() {
this.c = BlockPosition.ZERO;
this.d = BlockPosition.ZERO;
this.j = new TreeMap();
this.k = Lists.newArrayList();
}
public Village(World world) {
this.c = BlockPosition.ZERO;
this.d = BlockPosition.ZERO;
this.j = new TreeMap();
this.k = Lists.newArrayList();
this.a = world;
}
public void a(World world) {
this.a = world;
}
public void a(int i) {
this.g = i;
this.m();
this.l();
if (i % 20 == 0) {
this.k();
}
if (i % 30 == 0) {
this.j();
}
int j = this.h / 10;
if (this.l < j && this.b.size() > 20 && this.a.random.nextInt(7000) == 0) {
Vec3D vec3d = this.a(this.d, 2, 4, 2);
if (vec3d != null) {
EntityIronGolem entityirongolem = new EntityIronGolem(this.a);
entityirongolem.setPosition(vec3d.a, vec3d.b, vec3d.c);
this.a.addEntity(entityirongolem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.VILLAGE_DEFENSE); // CraftBukkit
++this.l;
}
}
}
private Vec3D a(BlockPosition blockposition, int i, int j, int k) {
for (int l = 0; l < 10; ++l) {
BlockPosition blockposition1 = blockposition.a(this.a.random.nextInt(16) - 8, this.a.random.nextInt(6) - 3, this.a.random.nextInt(16) - 8);
if (this.a(blockposition1) && this.a(new BlockPosition(i, j, k), blockposition1)) {
return new Vec3D(blockposition1.getX(), blockposition1.getY(), blockposition1.getZ());
}
}
return null;
}
private boolean a(BlockPosition blockposition, BlockPosition blockposition1) {
if (!World.a(this.a, blockposition1.down())) {
return false;
} else {
int i = blockposition1.getX() - blockposition.getX() / 2;
int j = blockposition1.getZ() - blockposition.getZ() / 2;
for (int k = i; k < i + blockposition.getX(); ++k) {
for (int l = blockposition1.getY(); l < blockposition1.getY() + blockposition.getY(); ++l) {
for (int i1 = j; i1 < j + blockposition.getZ(); ++i1) {
if (this.a.getType(new BlockPosition(k, l, i1)).getBlock().isOccluding()) {
return false;
}
}
}
}
return true;
}
}
private void j() {
List list = this.a.a(EntityIronGolem.class, new AxisAlignedBB(this.d.getX() - this.e, this.d.getY() - 4, this.d.getZ() - this.e, this.d.getX() + this.e, this.d.getY() + 4, this.d.getZ() + this.e));
this.l = list.size();
}
private void k() {
List list = this.a.a(EntityVillager.class, new AxisAlignedBB(this.d.getX() - this.e, this.d.getY() - 4, this.d.getZ() - this.e, this.d.getX() + this.e, this.d.getY() + 4, this.d.getZ() + this.e));
this.h = list.size();
if (this.h == 0) {
this.j.clear();
}
}
public BlockPosition a() {
return this.d;
}
public int b() {
return this.e;
}
public int c() {
return this.b.size();
}
public int d() {
return this.g - this.f;
}
public int e() {
return this.h;
}
public boolean a(BlockPosition blockposition) {
return this.d.i(blockposition) < (double) (this.e * this.e);
}
public List f() {
return this.b;
}
public VillageDoor b(BlockPosition blockposition) {
VillageDoor villagedoor = null;
int i = Integer.MAX_VALUE;
Iterator iterator = this.b.iterator();
while (iterator.hasNext()) {
VillageDoor villagedoor1 = (VillageDoor) iterator.next();
int j = villagedoor1.a(blockposition);
if (j < i) {
villagedoor = villagedoor1;
i = j;
}
}
return villagedoor;
}
public VillageDoor c(BlockPosition blockposition) {
VillageDoor villagedoor = null;
int i = Integer.MAX_VALUE;
Iterator iterator = this.b.iterator();
while (iterator.hasNext()) {
VillageDoor villagedoor1 = (VillageDoor) iterator.next();
int j = villagedoor1.a(blockposition);
if (j > 256) {
j *= 1000;
} else {
j = villagedoor1.c();
}
if (j < i) {
villagedoor = villagedoor1;
i = j;
}
}
return villagedoor;
}
public VillageDoor e(BlockPosition blockposition) {
if (this.d.i(blockposition) > (double) (this.e * this.e)) {
return null;
} else {
Iterator iterator = this.b.iterator();
VillageDoor villagedoor;
do {
if (!iterator.hasNext()) {
return null;
}
villagedoor = (VillageDoor) iterator.next();
} while (villagedoor.d().getX() != blockposition.getX() || villagedoor.d().getZ() != blockposition.getZ() || Math.abs(villagedoor.d().getY() - blockposition.getY()) > 1);
return villagedoor;
}
}
public void a(VillageDoor villagedoor) {
this.b.add(villagedoor);
this.c = this.c.a(villagedoor.d());
this.n();
this.f = villagedoor.h();
}
public boolean g() {
return this.b.isEmpty();
}
public void a(EntityLiving entityliving) {
Iterator iterator = this.k.iterator();
Village.Aggressor village_aggressor;
do {
if (!iterator.hasNext()) {
this.k.add(new Village.Aggressor(entityliving, this.g));
return;
}
village_aggressor = (Village.Aggressor) iterator.next();
} while (village_aggressor.a != entityliving);
village_aggressor.b = this.g;
}
public EntityLiving b(EntityLiving entityliving) {
double d0 = Double.MAX_VALUE;
Village.Aggressor village_aggressor = null;
for (int i = 0; i < this.k.size(); ++i) {
Village.Aggressor village_aggressor1 = this.k.get(i);
double d1 = village_aggressor1.a.h(entityliving);
if (d1 <= d0) {
village_aggressor = village_aggressor1;
d0 = d1;
}
}
return village_aggressor != null ? village_aggressor.a : null;
}
public EntityHuman c(EntityLiving entityliving) {
double d0 = Double.MAX_VALUE;
EntityHuman entityhuman = null;
Iterator iterator = this.j.keySet().iterator();
while (iterator.hasNext()) {
String s = (String) iterator.next();
if (this.d(s)) {
EntityHuman entityhuman1 = this.a.a(s);
if (entityhuman1 != null) {
double d1 = entityhuman1.h(entityliving);
if (d1 <= d0) {
entityhuman = entityhuman1;
d0 = d1;
}
}
}
}
return entityhuman;
}
private void l() {
Iterator iterator = this.k.iterator();
while (iterator.hasNext()) {
Village.Aggressor village_aggressor = (Village.Aggressor) iterator.next();
if (!village_aggressor.a.isAlive() || Math.abs(this.g - village_aggressor.b) > 300) {
iterator.remove();
}
}
}
private void m() {
boolean flag = false;
boolean flag1 = this.a.random.nextInt(50) == 0;
Iterator iterator = this.b.iterator();
while (iterator.hasNext()) {
VillageDoor villagedoor = (VillageDoor) iterator.next();
if (flag1) {
villagedoor.a();
}
if (!this.f(villagedoor.d()) || Math.abs(this.g - villagedoor.h()) > 1200) {
this.c = this.c.b(villagedoor.d());
flag = true;
villagedoor.a(true);
iterator.remove();
}
}
if (flag) {
this.n();
}
}
private boolean f(BlockPosition blockposition) {
Block block = this.a.getType(blockposition).getBlock();
return block instanceof BlockDoor && block.getMaterial() == Material.WOOD;
}
private void n() {
int i = this.b.size();
if (i == 0) {
this.d = new BlockPosition(0, 0, 0);
this.e = 0;
} else {
this.d = new BlockPosition(this.c.getX() / i, this.c.getY() / i, this.c.getZ() / i);
int j = 0;
VillageDoor villagedoor;
for (Iterator iterator = this.b.iterator(); iterator.hasNext(); j = Math.max(villagedoor.a(this.d), j)) {
villagedoor = (VillageDoor) iterator.next();
}
this.e = Math.max(32, (int) Math.sqrt(j) + 1);
}
}
public int a(String s) {
Integer integer = this.j.get(s);
return integer != null ? integer.intValue() : 0;
}
public int a(String s, int i) {
int j = this.a(s);
int k = MathHelper.clamp(j + i, -30, 10);
this.j.put(s, Integer.valueOf(k));
return k;
}
public boolean d(String s) {
return this.a(s) <= -15;
}
public void a(NBTTagCompound nbttagcompound) {
this.h = nbttagcompound.getInt("PopSize");
this.e = nbttagcompound.getInt("Radius");
this.l = nbttagcompound.getInt("Golems");
this.f = nbttagcompound.getInt("Stable");
this.g = nbttagcompound.getInt("Tick");
this.i = nbttagcompound.getInt("MTick");
this.d = new BlockPosition(nbttagcompound.getInt("CX"), nbttagcompound.getInt("CY"), nbttagcompound.getInt("CZ"));
this.c = new BlockPosition(nbttagcompound.getInt("ACX"), nbttagcompound.getInt("ACY"), nbttagcompound.getInt("ACZ"));
NBTTagList nbttaglist = nbttagcompound.getList("Doors", 10);
for (int i = 0; i < nbttaglist.size(); ++i) {
NBTTagCompound nbttagcompound1 = nbttaglist.get(i);
VillageDoor villagedoor = new VillageDoor(new BlockPosition(nbttagcompound1.getInt("X"), nbttagcompound1.getInt("Y"), nbttagcompound1.getInt("Z")), nbttagcompound1.getInt("IDX"), nbttagcompound1.getInt("IDZ"), nbttagcompound1.getInt("TS"));
this.b.add(villagedoor);
}
NBTTagList nbttaglist1 = nbttagcompound.getList("Players", 10);
for (int j = 0; j < nbttaglist1.size(); ++j) {
NBTTagCompound nbttagcompound2 = nbttaglist1.get(j);
if (nbttagcompound2.hasKey("UUID")) {
UserCache usercache = MinecraftServer.getServer().getUserCache();
GameProfile gameprofile = usercache.a(UUID.fromString(nbttagcompound2.getString("UUID")));
if (gameprofile != null) {
this.j.put(gameprofile.getName(), Integer.valueOf(nbttagcompound2.getInt("S")));
}
} else {
this.j.put(nbttagcompound2.getString("Name"), Integer.valueOf(nbttagcompound2.getInt("S")));
}
}
}
public void b(NBTTagCompound nbttagcompound) {
nbttagcompound.setInt("PopSize", this.h);
nbttagcompound.setInt("Radius", this.e);
nbttagcompound.setInt("Golems", this.l);
nbttagcompound.setInt("Stable", this.f);
nbttagcompound.setInt("Tick", this.g);
nbttagcompound.setInt("MTick", this.i);
nbttagcompound.setInt("CX", this.d.getX());
nbttagcompound.setInt("CY", this.d.getY());
nbttagcompound.setInt("CZ", this.d.getZ());
nbttagcompound.setInt("ACX", this.c.getX());
nbttagcompound.setInt("ACY", this.c.getY());
nbttagcompound.setInt("ACZ", this.c.getZ());
NBTTagList nbttaglist = new NBTTagList();
Iterator iterator = this.b.iterator();
while (iterator.hasNext()) {
VillageDoor villagedoor = (VillageDoor) iterator.next();
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
nbttagcompound1.setInt("X", villagedoor.d().getX());
nbttagcompound1.setInt("Y", villagedoor.d().getY());
nbttagcompound1.setInt("Z", villagedoor.d().getZ());
nbttagcompound1.setInt("IDX", villagedoor.f());
nbttagcompound1.setInt("IDZ", villagedoor.g());
nbttagcompound1.setInt("TS", villagedoor.h());
nbttaglist.add(nbttagcompound1);
}
nbttagcompound.set("Doors", nbttaglist);
NBTTagList nbttaglist1 = new NBTTagList();
Iterator iterator1 = this.j.keySet().iterator();
while (iterator1.hasNext()) {
String s = (String) iterator1.next();
NBTTagCompound nbttagcompound2 = new NBTTagCompound();
UserCache usercache = MinecraftServer.getServer().getUserCache();
GameProfile gameprofile = usercache.getProfile(s);
if (gameprofile != null) {
nbttagcompound2.setString("UUID", gameprofile.getId().toString());
nbttagcompound2.setInt("S", this.j.get(s).intValue());
nbttaglist1.add(nbttagcompound2);
}
}
nbttagcompound.set("Players", nbttaglist1);
}
public void h() {
this.i = this.g;
}
public boolean i() {
return this.i == 0 || this.g - this.i >= 3600;
}
public void b(int i) {
Iterator iterator = this.j.keySet().iterator();
while (iterator.hasNext()) {
String s = (String) iterator.next();
this.a(s, i);
}
}
class Aggressor {
public EntityLiving a;
public int b;
Aggressor(EntityLiving entityliving, int i) {
this.a = entityliving;
this.b = i;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy