Search in sources :

Example 1 with WorldDataInstance

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;
}
Also used : ManagedLocation(net.tropicraft.core.common.town.ManagedLocation) Iterator(java.util.Iterator) BlockPos(net.minecraft.util.math.BlockPos) WorldDataInstance(net.tropicraft.core.common.capability.WorldDataInstance)

Example 2 with WorldDataInstance

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());
    }
}
Also used : WorldEventListener(net.tropicraft.core.common.worldgen.village.WorldEventListener) WorldProviderTropicraft(net.tropicraft.core.common.dimension.WorldProviderTropicraft) WorldDataInstance(net.tropicraft.core.common.capability.WorldDataInstance) SubscribeEvent(net.minecraftforge.fml.common.eventhandler.SubscribeEvent)

Example 3 with WorldDataInstance

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);
            }
        }
    }
}
Also used : WorldDataInstance(net.tropicraft.core.common.capability.WorldDataInstance) WorldProviderTropicraft(net.tropicraft.core.common.dimension.WorldProviderTropicraft) HashMap(java.util.HashMap) TownKoaVillage(net.tropicraft.core.common.worldgen.village.TownKoaVillage) BuildJob(net.tropicraft.core.common.build.world.BuildJob) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) CommandException(net.minecraft.command.CommandException) MinecraftServer(net.minecraft.server.MinecraftServer) Vec3d(net.minecraft.util.math.Vec3d) Map(java.util.Map) Entity(net.minecraft.entity.Entity) BuildServerTicks(net.tropicraft.core.common.build.BuildServerTicks) TownKoaVillageGenHelper(net.tropicraft.core.common.worldgen.village.TownKoaVillageGenHelper) EntityList(net.minecraft.entity.EntityList) CommandBase(net.minecraft.command.CommandBase) BlockPos(net.minecraft.util.math.BlockPos) Tropicraft(net.tropicraft.Tropicraft) Build(net.tropicraft.core.common.build.world.Build) TextComponentString(net.minecraft.util.text.TextComponentString) List(java.util.List) ICommandSender(net.minecraft.command.ICommandSender) EntityLivingBase(net.minecraft.entity.EntityLivingBase) EntityPlayer(net.minecraft.entity.player.EntityPlayer) MathHelper(net.minecraft.util.math.MathHelper) ResourceLocation(net.minecraft.util.ResourceLocation) Entity(net.minecraft.entity.Entity) HashMap(java.util.HashMap) TextComponentString(net.minecraft.util.text.TextComponentString) Vec3d(net.minecraft.util.math.Vec3d) CommandException(net.minecraft.command.CommandException) TextComponentString(net.minecraft.util.text.TextComponentString) Build(net.tropicraft.core.common.build.world.Build) ResourceLocation(net.minecraft.util.ResourceLocation) EntityLivingBase(net.minecraft.entity.EntityLivingBase) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) BlockPos(net.minecraft.util.math.BlockPos) TownKoaVillage(net.tropicraft.core.common.worldgen.village.TownKoaVillage) BuildJob(net.tropicraft.core.common.build.world.BuildJob) WorldDataInstance(net.tropicraft.core.common.capability.WorldDataInstance)

Aggregations

WorldDataInstance (net.tropicraft.core.common.capability.WorldDataInstance)3 BlockPos (net.minecraft.util.math.BlockPos)2 WorldProviderTropicraft (net.tropicraft.core.common.dimension.WorldProviderTropicraft)2 HashMap (java.util.HashMap)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 CommandBase (net.minecraft.command.CommandBase)1 CommandException (net.minecraft.command.CommandException)1 ICommandSender (net.minecraft.command.ICommandSender)1 Entity (net.minecraft.entity.Entity)1 EntityList (net.minecraft.entity.EntityList)1 EntityLivingBase (net.minecraft.entity.EntityLivingBase)1 EntityPlayer (net.minecraft.entity.player.EntityPlayer)1 EntityPlayerMP (net.minecraft.entity.player.EntityPlayerMP)1 MinecraftServer (net.minecraft.server.MinecraftServer)1 ResourceLocation (net.minecraft.util.ResourceLocation)1 MathHelper (net.minecraft.util.math.MathHelper)1 Vec3d (net.minecraft.util.math.Vec3d)1 TextComponentString (net.minecraft.util.text.TextComponentString)1