use of net.tropicraft.core.common.capability.WorldDataInstance in project Tropicraft by Tropicraft.
the class TownKoaVillageGenHelper method hookTryGenVillage.
/* Takes coords that are assumed to be a beach, scans to find the ocean side and checks if theres enough ocean space to gen */
public static boolean hookTryGenVillage(BlockPos parCoords, World parWorld) {
/*int x = MathHelper.floor_double(player.getX());
int z = MathHelper.floor_double(player.getZ());
int y = player.worldObj.getHeightValue(x, z);*/
int directionTry = getBestGenDirection(parCoords, parWorld);
if (directionTry != -1) {
dbg("test success! dir: " + directionTry);
BlockPos centerCoords = getCoordsFromAdjustedDirection(parCoords, directionTry);
dbg("centerCoords: " + centerCoords);
// make sure its at exact height
centerCoords = new BlockPos(centerCoords.getX(), WorldProviderTropicraft.MID_HEIGHT + 1, centerCoords.getZ());
TownKoaVillage village = new TownKoaVillage();
WorldDataInstance storage = parWorld.getCapability(Tropicraft.WORLD_DATA_INSTANCE, null);
if (storage != null) {
int minDistBetweenVillages = 512;
Iterator it = storage.lookupTickingManagedLocations.values().iterator();
while (it.hasNext()) {
ManagedLocation town = (ManagedLocation) it.next();
if (Math.sqrt(town.spawn.distanceSq(parCoords)) < minDistBetweenVillages) {
// System.out.println("village to close to another, aborting");
return false;
}
}
int newID = storage.getAndIncrementKoaIDVillage();
// int newID = parWorld.rand.nextInt(9999);
village.initData(newID, parWorld.provider.getDimension(), centerCoords);
village.direction = directionTry;
village.initFirstTime();
storage.addTickingLocation(village);
return true;
} else {
// dbg("ERROR: cant get world capability???");
}
} else {
// System.out.println("test fail!");
}
return false;
}
use of net.tropicraft.core.common.capability.WorldDataInstance in project Tropicraft by Tropicraft.
the class MiscEvents method tickServer.
@SubscribeEvent
public void tickServer(TickEvent.WorldTickEvent event) {
if (event.world.provider instanceof WorldProviderTropicraft) {
WorldDataInstance storage = event.world.getCapability(Tropicraft.WORLD_DATA_INSTANCE, null);
if (storage != null) {
storage.tick();
}
}
if (!lookupDimIDToRegisteredListener.contains(event.world.provider.getDimension())) {
System.out.println("adding world listener for dim " + event.world.provider.getDimension());
event.world.addEventListener(new WorldEventListener());
lookupDimIDToRegisteredListener.add(event.world.provider.getDimension());
}
}
use of net.tropicraft.core.common.capability.WorldDataInstance in project Tropicraft by Tropicraft.
the class CommandTropicsMisc method execute.
@Override
public void execute(MinecraftServer server, ICommandSender commandSender, String[] args) throws CommandException {
EntityPlayerMP player = this.getCommandSenderAsPlayer(commandSender);
if (args.length > 0) {
if (args[0].equals("village_coord")) {
int x = 8452;
int z = 5921;
int relX = x - player.getPosition().getX();
int relZ = z - player.getPosition().getZ();
// x and z swapped on purpose
System.out.println("pos: " + relZ + ", " + 0 + ", " + relX);
} else if (args[0].equals("village_new")) {
int x = MathHelper.floor(player.posX);
int z = MathHelper.floor(player.posZ);
int y = player.world.getHeight(x, z);
if (y < WorldProviderTropicraft.MID_HEIGHT)
y = WorldProviderTropicraft.MID_HEIGHT + 1;
WorldDataInstance storage = player.world.getCapability(Tropicraft.WORLD_DATA_INSTANCE, null);
if (storage != null) {
TownKoaVillage village = new TownKoaVillage();
int newID = storage.getAndIncrementKoaIDVillage();
village.initData(newID, player.world.provider.getDimension(), new BlockPos(x, y, z));
// TEMP!?
village.direction = 0;
village.initFirstTime();
// wd.addTickingLocation(village);
storage.addTickingLocation(village);
}
} else if (args[0].equals("village_try")) {
int x = MathHelper.floor(player.posX);
int z = MathHelper.floor(player.posZ);
int y = player.world.getTopSolidOrLiquidBlock(new BlockPos(x, 0, z)).getY();
if (y < WorldProviderTropicraft.MID_HEIGHT)
y = WorldProviderTropicraft.MID_HEIGHT + 1;
boolean result = TownKoaVillageGenHelper.hookTryGenVillage(new BlockPos(x, y, z), player.world);
if (!result) {
System.out.println("failed to gen village");
}
} else if (args[0].equals("schematic_save")) {
try {
String name = args[1];
// Minecraft.getMinecraft().mouseHelper.ungrabMouseCursor();
Vec3d vec = commandSender.getPositionVector();
// Integer.parseInt(args[2]);
int sx = MathHelper.floor(parseCoordinate(vec.x, args[2], false).getResult());
// Integer.parseInt(args[3]);
int sy = MathHelper.floor(parseCoordinate(vec.y, args[3], false).getResult());
// Integer.parseInt(args[4]);
int sz = MathHelper.floor(parseCoordinate(vec.z, args[4], false).getResult());
// Integer.parseInt(args[5]);
int ex = MathHelper.floor(parseCoordinate(vec.x, args[5], false).getResult());
// Integer.parseInt(args[6]);
int ey = MathHelper.floor(parseCoordinate(vec.y, args[6], false).getResult());
// Integer.parseInt(args[7]);
int ez = MathHelper.floor(parseCoordinate(vec.z, args[7], false).getResult());
Build clipboardData = new Build(0, 0, 0, name, true);
clipboardData.newFormat = true;
clipboardData.recalculateLevelSize(sx, sy, sz, ex, ey, ez, true);
clipboardData.scanLevelToData(player.world);
clipboardData.writeNBT();
commandSender.sendMessage(new TextComponentString("schematic saved to " + name + ".schematic"));
} catch (Exception ex) {
ex.printStackTrace();
commandSender.sendMessage(new TextComponentString("command usage: tc_village schematic_save <filename> <start coords> <end coords>"));
commandSender.sendMessage(new TextComponentString("eg: tc_village schematic_save myfile 0 0 0 5 5 5"));
commandSender.sendMessage(new TextComponentString("start and end coords are inclusive"));
}
} else if (args[0].equals("schematic_print")) {
try {
Vec3d vec = commandSender.getPositionVector();
String name = args[1];
CoordinateArg sx = parseCoordinate(vec.x, args[2], false);
CoordinateArg sy = parseCoordinate(vec.y, args[3], false);
CoordinateArg sz = parseCoordinate(vec.z, args[4], false);
int x = MathHelper.floor(sx.getResult());
int y = MathHelper.floor(sy.getResult());
int z = MathHelper.floor(sz.getResult());
int direction = 0;
if (args.length > 5) {
direction = Integer.parseInt(args[5]);
}
Build buildData = new Build(x, y, z, name, false);
BuildJob bj = new BuildJob(-99, x, y, z, buildData);
bj.build.dim = player.world.provider.getDimension();
// skip air setting pass
bj.useFirstPass = false;
bj.useRotationBuild = true;
bj.build_rate = 10000;
bj.notifyFlag = 2;
bj.setDirection(direction);
// bj.customGenCallback = this;
// bj.blockIDsNoBuildOver.add(HostileWorlds.blockSourceStructure);
BuildServerTicks.buildMan.addBuild(bj);
commandSender.sendMessage(new TextComponentString("printing schematic"));
} catch (Exception ex) {
ex.printStackTrace();
commandSender.sendMessage(new TextComponentString("command usage: tc_village schematic_print <filename> <start coords>"));
commandSender.sendMessage(new TextComponentString("eg: tc_village schematic_print myfile 5 5 5"));
}
} else if (args[0].equals("entities")) {
HashMap<ResourceLocation, Integer> lookupCounts = new HashMap<>();
for (Entity ent : player.world.loadedEntityList) {
if (ent instanceof EntityLivingBase) {
ResourceLocation key = EntityList.getKey(ent.getClass());
lookupCounts.merge(key, 1, (a, b) -> a + b);
}
}
player.sendMessage(new TextComponentString("Entity counts: "));
int count = 0;
for (Map.Entry<ResourceLocation, Integer> entry : lookupCounts.entrySet()) {
ResourceLocation name = entry.getKey();
player.sendMessage(new TextComponentString(name + ": " + entry.getValue()));
count += entry.getValue();
}
player.sendMessage(new TextComponentString("total: " + count));
} else if (args[0].equals("mount")) {
float clDist = 99999;
Entity clEntity = null;
String name = args[1];
boolean reverse = false;
boolean playerMode = false;
Class clazz = EntityList.getClass(new ResourceLocation(name));
if (clazz == null) {
clazz = EntityPlayer.class;
playerMode = true;
}
if (args.length > 2) {
reverse = args[2].equals("reverse");
// no greifing
if (reverse) {
playerMode = false;
}
}
if (clazz != null) {
List<Entity> listEnts = player.world.getEntitiesWithinAABB(clazz, player.getEntityBoundingBox().grow(15, 15, 15));
for (Entity ent : listEnts) {
float dist = player.getDistance(ent);
if (dist < clDist) {
if (!playerMode) {
clDist = dist;
clEntity = ent;
} else {
if (player.getName().equals(name)) {
clEntity = ent;
break;
}
}
}
}
}
if (clEntity != null) {
if (reverse) {
clEntity.startRiding(player);
} else {
player.startRiding(clEntity);
}
}
} else if (args[0].equals("enc_unlock")) {
for (int i = 0; i < Tropicraft.encyclopedia.getPageCount(); i++) {
Tropicraft.encyclopedia.markPageAsNewlyVisible(i);
}
}
}
}
Aggregations