diff --git a/build.gradle b/build.gradle index c15db9a9..0b0fff8e 100644 --- a/build.gradle +++ b/build.gradle @@ -75,6 +75,7 @@ processResources { task generatePocketSchematics(dependsOn: jar, type: JavaExec, group: "dimdoors") { classpath = files('build/libs/dimdoors.jar') classpath += sourceSets.main.runtimeClasspath - main = "com.zixiken.dimdoors.shared.util.PocketSchematicGenerator" + main = "com.zixiken.dimdoors.shared.tools.PocketSchematicGenerator" + //noinspection GroovyAssignabilityCheck (IntelliJ is wrong) args "src/main/resources/assets/dimdoors/pockets/schematic" } diff --git a/src/main/java/com/zixiken/dimdoors/DimDoors.java b/src/main/java/com/zixiken/dimdoors/DimDoors.java index c688c8c1..ce78b1fd 100644 --- a/src/main/java/com/zixiken/dimdoors/DimDoors.java +++ b/src/main/java/com/zixiken/dimdoors/DimDoors.java @@ -1,6 +1,6 @@ package com.zixiken.dimdoors; -import com.zixiken.dimdoors.shared.commands.PocketCommand; +import com.zixiken.dimdoors.shared.commands.CommandPocket; import com.zixiken.dimdoors.shared.commands.CommandDimTeleport; import com.zixiken.dimdoors.shared.DDConfig; import com.zixiken.dimdoors.shared.DDProxyCommon; @@ -72,7 +72,7 @@ public class DimDoors { private void registerCommands(FMLServerStartingEvent event) { event.registerServerCommand(new CommandDimTeleport()); - event.registerServerCommand(new PocketCommand()); + event.registerServerCommand(new CommandPocket()); } public static boolean isClient() { diff --git a/src/main/java/com/zixiken/dimdoors/client/DDProxyClient.java b/src/main/java/com/zixiken/dimdoors/client/DDProxyClient.java index 4fba9805..b27f54f7 100644 --- a/src/main/java/com/zixiken/dimdoors/client/DDProxyClient.java +++ b/src/main/java/com/zixiken/dimdoors/client/DDProxyClient.java @@ -2,7 +2,6 @@ package com.zixiken.dimdoors.client; import com.zixiken.dimdoors.shared.DDProxyCommon; import com.zixiken.dimdoors.shared.entities.EntityMonolith; -import com.zixiken.dimdoors.shared.entities.RenderMonolith; import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift; import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/zixiken/dimdoors/shared/entities/ModelMonolith.java b/src/main/java/com/zixiken/dimdoors/client/ModelMonolith.java similarity index 81% rename from src/main/java/com/zixiken/dimdoors/shared/entities/ModelMonolith.java rename to src/main/java/com/zixiken/dimdoors/client/ModelMonolith.java index 5ed5734a..e32c6a08 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/entities/ModelMonolith.java +++ b/src/main/java/com/zixiken/dimdoors/client/ModelMonolith.java @@ -1,7 +1,8 @@ -package com.zixiken.dimdoors.shared.entities; +package com.zixiken.dimdoors.client; import java.util.Random; +import com.zixiken.dimdoors.shared.entities.EntityMonolith; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.opengl.GL11; @@ -21,14 +22,14 @@ public class ModelMonolith extends ModelBase { textureHeight = 256; wholeMonolith = new ModelRenderer(this, 0, 0); - wholeMonolith.addBox(-24F,-108F/1.3F, -6F, 48, 108, 12); + wholeMonolith.addBox(-24F, -108F / 1.3F, -6F, 48, 108, 12); } @Override public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scale) { EntityMonolith monolith = (EntityMonolith) entityIn; - setRotationAngles(0, 0, 0, 0, 0,0, monolith); + setRotationAngles(0, 0, 0, 0, 0, 0, monolith); GL11.glScalef(monolith.getRenderSizeModifier(), monolith.getRenderSizeModifier(), monolith.getRenderSizeModifier()); wholeMonolith.render(scale); } diff --git a/src/main/java/com/zixiken/dimdoors/client/ParticleRiftEffect.java b/src/main/java/com/zixiken/dimdoors/client/ParticleRiftEffect.java index f2aeb1f9..a937ed1f 100644 --- a/src/main/java/com/zixiken/dimdoors/client/ParticleRiftEffect.java +++ b/src/main/java/com/zixiken/dimdoors/client/ParticleRiftEffect.java @@ -1,6 +1,6 @@ package com.zixiken.dimdoors.client; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.WorldUtils; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import net.minecraft.client.particle.ParticleSimpleAnimated; import net.minecraft.client.renderer.BufferBuilder; diff --git a/src/main/java/com/zixiken/dimdoors/shared/entities/RenderMonolith.java b/src/main/java/com/zixiken/dimdoors/client/RenderMonolith.java similarity index 97% rename from src/main/java/com/zixiken/dimdoors/shared/entities/RenderMonolith.java rename to src/main/java/com/zixiken/dimdoors/client/RenderMonolith.java index c2cba95a..2470de62 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/entities/RenderMonolith.java +++ b/src/main/java/com/zixiken/dimdoors/client/RenderMonolith.java @@ -1,6 +1,8 @@ -package com.zixiken.dimdoors.shared.entities; +package com.zixiken.dimdoors.client; import com.zixiken.dimdoors.DimDoors; +import com.zixiken.dimdoors.client.ModelMonolith; +import com.zixiken.dimdoors.shared.entities.EntityMonolith; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.entity.RenderLiving; diff --git a/src/main/java/com/zixiken/dimdoors/client/TileEntityEntranceRiftRenderer.java b/src/main/java/com/zixiken/dimdoors/client/TileEntityEntranceRiftRenderer.java index 37325068..b15d6dd2 100644 --- a/src/main/java/com/zixiken/dimdoors/client/TileEntityEntranceRiftRenderer.java +++ b/src/main/java/com/zixiken/dimdoors/client/TileEntityEntranceRiftRenderer.java @@ -7,7 +7,7 @@ import java.util.Random; import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift; -import com.zixiken.dimdoors.shared.util.RGBA; +import ddutils.render.RGBA; import net.minecraft.client.renderer.*; import net.minecraft.client.renderer.vertex.*; import net.minecraft.util.EnumFacing; diff --git a/src/main/java/com/zixiken/dimdoors/shared/DDProxyCommon.java b/src/main/java/com/zixiken/dimdoors/shared/DDProxyCommon.java index 3d7f7fd7..14809938 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/DDProxyCommon.java +++ b/src/main/java/com/zixiken/dimdoors/shared/DDProxyCommon.java @@ -9,8 +9,6 @@ import com.zixiken.dimdoors.shared.tileentities.*; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import com.zixiken.dimdoors.shared.world.ModBiomes; import net.minecraft.util.ResourceLocation; -import net.minecraft.world.WorldProvider; -import net.minecraftforge.client.IRenderHandler; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; diff --git a/src/main/java/com/zixiken/dimdoors/shared/EventHandler.java b/src/main/java/com/zixiken/dimdoors/shared/EventHandler.java index 049f426f..e8b4e295 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/EventHandler.java +++ b/src/main/java/com/zixiken/dimdoors/shared/EventHandler.java @@ -30,8 +30,8 @@ public class EventHandler { @SubscribeEvent(priority = EventPriority.LOWEST) // don't let other mods do something based on the event public static void onLivingHurt(LivingHurtEvent event) { Entity entity = event.getEntity(); - if (entity.dimension == DimDoorDimensions.LIMBO.getId() && event.getSource() == DamageSource.FALL) { - event.setCanceled(true);// no fall damage in LIMBO + if (entity.dimension == DimDoorDimensions.limbo.getId() && event.getSource() == DamageSource.FALL) { + event.setCanceled(true);// no fall damage in limbo } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/SchematicHandler.java b/src/main/java/com/zixiken/dimdoors/shared/SchematicHandler.java index ea8f2dfc..c8f74f93 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/SchematicHandler.java +++ b/src/main/java/com/zixiken/dimdoors/shared/SchematicHandler.java @@ -1,8 +1,8 @@ package com.zixiken.dimdoors.shared; import com.zixiken.dimdoors.shared.pockets.PocketTemplate; -import com.zixiken.dimdoors.shared.util.MathUtils; -import com.zixiken.dimdoors.shared.util.Schematic; +import ddutils.math.MathUtils; +import ddutils.schem.Schematic; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -22,13 +22,12 @@ import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; -import com.zixiken.dimdoors.shared.util.SchematicConverter; +import com.zixiken.dimdoors.shared.tools.SchematicConverter; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.CompressedStreamTools; import org.apache.commons.io.IOUtils; /** - * * @author Robijnvogel */ public class SchematicHandler { // TODO: make this more general (not dimdoors-related) @@ -134,7 +133,7 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re try { schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream); if (!schematicNBT.hasKey("Version")) { - schematic = SchematicConverter.loadOldDimDoorSchematicFromNBT(schematicNBT, template.getName()); + schematic = SchematicConverter.convertSchematic(schematicNBT, template.getName()); } else { schematic = Schematic.loadFromNBT(schematicNBT, template.getName()); } @@ -151,7 +150,7 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re } if (schematic != null - && (schematic.getWidth() > (template.getSize() + 1) * 16 || schematic.getLength() > (template.getSize() + 1) * 16)) { + && (schematic.width > (template.getSize() + 1) * 16 || schematic.length > (template.getSize() + 1) * 16)) { schematic = null; DimDoors.log.warn("Schematic " + template.getName() + " was bigger than specified in its json file and therefore wasn't loaded"); } @@ -235,7 +234,6 @@ public class SchematicHandler { // TODO: make this more general (not dimdoors-re return templates.get(index); } - /** * Gets a random template matching certain criteria. * diff --git a/src/main/java/com/zixiken/dimdoors/shared/VirtualLocation.java b/src/main/java/com/zixiken/dimdoors/shared/VirtualLocation.java index 63b940bd..6fb12f0e 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/VirtualLocation.java +++ b/src/main/java/com/zixiken/dimdoors/shared/VirtualLocation.java @@ -1,30 +1,39 @@ package com.zixiken.dimdoors.shared; -import com.zixiken.dimdoors.shared.util.Location; +import com.zixiken.dimdoors.shared.pockets.Pocket; +import com.zixiken.dimdoors.shared.pockets.PocketRegistry; +import ddutils.Location; +import ddutils.WorldUtils; +import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.ToString; import lombok.Value; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; + +import java.util.Random; @Value @ToString @AllArgsConstructor @Builder(toBuilder = true) public class VirtualLocation { // TODO: use BlockPos/Location - int dimID; - int x; - int y; - int z; + Location location; int depth; - public NBTTagCompound writeToNBT() { - NBTTagCompound nbt = new NBTTagCompound(); - nbt.setInteger("dim", dimID); - nbt.setInteger("x", x); - nbt.setInteger("y", y); - nbt.setInteger("z", z); - nbt.setInteger("depth", depth); - return nbt; + public VirtualLocation(int dim, BlockPos pos, int depth) { + this(new Location(dim, pos), depth); } + public VirtualLocation(int dim, int x, int y, int z, int depth) { + this(new Location(dim, x, y, z), depth); + } + + public int getDim() { return location.getDim(); } + public BlockPos getPos() { return location.getPos(); } + public int getX() { return location.getX(); } + public int getY() { return location.getY(); } + public int getZ() { return location.getZ(); } + public static VirtualLocation readFromNBT(NBTTagCompound nbt) { int dim = nbt.getInteger("dim"); int x = nbt.getInteger("x"); @@ -34,7 +43,44 @@ public class VirtualLocation { // TODO: use BlockPos/Location return new VirtualLocation(dim, x, y, z, depth); } - public Location getOverworldLocation() { - return new Location(dimID, x, y, z); + public NBTTagCompound writeToNBT() { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setInteger("dim", location.getDim()); + nbt.setInteger("x", location.getPos().getX()); + nbt.setInteger("y", location.getPos().getY()); + nbt.setInteger("z", location.getPos().getZ()); + nbt.setInteger("depth", depth); + return nbt; + } + + // TODO: move to VirtualLocation + public static VirtualLocation fromLocation(Location location) { // TODO: reverse function too + VirtualLocation virtualLocation = null; + if (DimDoorDimensions.isPocketDimension(location.getDim())) { + Pocket pocket = PocketRegistry.getForDim(location.getDim()).getPocketFromLocation(location.getPos().getY(), location.getPos().getY(), location.getPos().getZ()); + if (pocket != null) { + virtualLocation = pocket.getVirtualLocation(); + } else { + virtualLocation = new VirtualLocation(0, 0, 0, 0, 0); // TODO: door was placed in a pocket dim but outside of a pocket... + } + } + if (virtualLocation == null) { + virtualLocation = new VirtualLocation(WorldUtils.getDim(location.getWorld()), location.getPos().getX(), location.getPos().getY(), location.getPos().getZ(), 0); + } + return virtualLocation; + } + + public VirtualLocation transformDepth(int depth) { // TODO: Config option for block ratio between depths (see video of removed features) + Random random = new Random(); + int depthDiff = Math.abs(this.depth - depth); + int base = DDConfig.getOwCoordinateOffsetBase(); + double power = DDConfig.getOwCoordinateOffsetPower(); + int xOffset = random.nextInt((int) Math.pow(base * depthDiff, power)) * (random.nextBoolean() ? 1 : -1); + int zOffset = random.nextInt((int) Math.pow(base * depthDiff, power)) * (random.nextBoolean() ? 1 : -1); + return new VirtualLocation(getDim(), getPos().offset(EnumFacing.EAST, xOffset).offset(EnumFacing.SOUTH, zOffset), depth); + } + + public Location projectToWorld() { + return transformDepth(0).getLocation(); } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalDoor.java b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalDoor.java index 18c3fc0c..0a570495 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalDoor.java +++ b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalDoor.java @@ -10,8 +10,8 @@ import com.zixiken.dimdoors.shared.rifts.RiftRegistry; import com.zixiken.dimdoors.shared.tileentities.TileEntityEntranceRift; import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.Location; +import ddutils.WorldUtils; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import net.minecraft.block.Block; import net.minecraft.block.BlockDoor; diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimTrapdoorWood.java b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalTrapdoorWood.java similarity index 85% rename from src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimTrapdoorWood.java rename to src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalTrapdoorWood.java index 6c1c85ff..506bdd55 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimTrapdoorWood.java +++ b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockDimensionalTrapdoorWood.java @@ -6,11 +6,11 @@ import net.minecraft.block.*; import net.minecraft.block.material.Material; import net.minecraft.util.ResourceLocation; -public class BlockDimTrapdoorWood extends BlockDimensionalTrapdoor { +public class BlockDimensionalTrapdoorWood extends BlockDimensionalTrapdoor { public static final String ID = "dimensional_trapdoor"; - public BlockDimTrapdoorWood() { + public BlockDimensionalTrapdoorWood() { super(Material.WOOD); setRegistryName(new ResourceLocation(DimDoors.MODID, ID)); setUnlocalizedName(ID); diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFabric.java b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFabric.java index dee19a95..53fbae08 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFabric.java +++ b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFabric.java @@ -3,10 +3,9 @@ package com.zixiken.dimdoors.shared.blocks; import java.util.Random; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.DDConfig; -import com.zixiken.dimdoors.shared.util.RandomUtils; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.TeleportUtils; +import com.zixiken.dimdoors.shared.VirtualLocation; +import ddutils.Location; +import ddutils.TeleportUtils; import com.zixiken.dimdoors.shared.world.limbodimension.LimboDecay; import com.zixiken.dimdoors.shared.world.limbodimension.WorldProviderLimbo; import lombok.Getter; @@ -175,15 +174,13 @@ public class BlockFabric extends Block { } @Override - public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn) { - IBlockState state = worldIn.getBlockState(pos); - if (state.getValue(TYPE) == EnumType.ETERNAL && worldIn.provider instanceof WorldProviderLimbo && entityIn instanceof EntityPlayer) { - Location origLocation = new Location(worldIn, pos); - Location transFormedLocation = RandomUtils.transformLocationRandomly(DDConfig.getOwCoordinateOffsetBase(), DDConfig.getOwCoordinateOffsetPower(), DDConfig.getMaxDungeonDepth(), origLocation); - - BlockPos correctedPos = DimDoors.proxy.getWorldServer(0).getTopSolidOrLiquidBlock(transFormedLocation.getPos()); - Location correctedLocation = new Location(0, correctedPos); - TeleportUtils.teleport(entityIn, correctedLocation, 0, 0); + public void onEntityWalk(World world, BlockPos pos, Entity entityIn) { + IBlockState state = world.getBlockState(pos); + if (state.getValue(TYPE) == EnumType.ETERNAL && world.provider instanceof WorldProviderLimbo && entityIn instanceof EntityPlayer) { + Location loc = VirtualLocation.fromLocation(new Location(world, pos)).projectToWorld(); + BlockPos correctedPos = loc.getWorld().getTopSolidOrLiquidBlock(loc.getPos()); + Random random = new Random(); + TeleportUtils.teleport(entityIn, new Location(loc.getDim(), correctedPos), random.nextFloat() * 360, random.nextFloat() * 360); } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFloatingRift.java b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFloatingRift.java index b8fbc69b..d6fc02b6 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFloatingRift.java +++ b/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockFloatingRift.java @@ -6,6 +6,7 @@ import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.client.ParticleRiftEffect; import com.zixiken.dimdoors.shared.items.ModItems; import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift; +import ddutils.blocks.BlockSpecialAir; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.MapColor; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/IRiftProvider.java b/src/main/java/com/zixiken/dimdoors/shared/blocks/IRiftProvider.java index 70c42aef..80efbee3 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/IRiftProvider.java +++ b/src/main/java/com/zixiken/dimdoors/shared/blocks/IRiftProvider.java @@ -1,9 +1,9 @@ package com.zixiken.dimdoors.shared.blocks; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.pockets.PocketRegistry; +import com.zixiken.dimdoors.shared.VirtualLocation; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; -import com.zixiken.dimdoors.shared.util.Location; +import ddutils.Location; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; @@ -25,7 +25,7 @@ public interface IRiftProvider extends ITileEntityProv T rift = createNewTileEntity(world, state.getBlock().getMetaFromState(state)); // Set the rift's virtual position - rift.setVirtualLocation(PocketRegistry.locationToVirtualLocation(new Location(rift.getWorld(), rift.getPos()))); + rift.setVirtualLocation(VirtualLocation.fromLocation(new Location(rift.getWorld(), rift.getPos()))); // Configure the rift to its default functionality setupRift(rift); diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/ModBlocks.java b/src/main/java/com/zixiken/dimdoors/shared/blocks/ModBlocks.java index 7f3cb367..c7bf0d32 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/ModBlocks.java +++ b/src/main/java/com/zixiken/dimdoors/shared/blocks/ModBlocks.java @@ -17,7 +17,7 @@ public class ModBlocks { public static final BlockDimensionalDoorUnstable UNSTABLE_DIMENSIONAL_DOOR = new BlockDimensionalDoorUnstable(); public static final BlockDimensionalDoorTransient TRANSIENT_DIMENSIONAL_DOOR = new BlockDimensionalDoorTransient(); public static final BlockDimensionalDoorWarp WARP_DIMENSIONAL_DOOR = new BlockDimensionalDoorWarp(); - public static final BlockDimTrapdoorWood DIMENSIONAL_TRAPDOOR = new BlockDimTrapdoorWood(); + public static final BlockDimensionalTrapdoorWood DIMENSIONAL_TRAPDOOR = new BlockDimensionalTrapdoorWood(); // Blocks public static final BlockFabric FABRIC = new BlockFabric(); diff --git a/src/main/java/com/zixiken/dimdoors/shared/commands/CommandDimTeleport.java b/src/main/java/com/zixiken/dimdoors/shared/commands/CommandDimTeleport.java index c90dd059..cae5739a 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/commands/CommandDimTeleport.java +++ b/src/main/java/com/zixiken/dimdoors/shared/commands/CommandDimTeleport.java @@ -1,13 +1,13 @@ package com.zixiken.dimdoors.shared.commands; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.StringUtils; +import ddutils.Location; +import ddutils.StringUtils; import java.util.ArrayList; import java.util.List; import javax.annotation.Nullable; -import com.zixiken.dimdoors.shared.util.TeleportUtils; +import ddutils.TeleportUtils; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; import net.minecraft.command.ICommandSender; diff --git a/src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java b/src/main/java/com/zixiken/dimdoors/shared/commands/CommandPocket.java similarity index 94% rename from src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java rename to src/main/java/com/zixiken/dimdoors/shared/commands/CommandPocket.java index 43cd7711..29a0b7f4 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java +++ b/src/main/java/com/zixiken/dimdoors/shared/commands/CommandPocket.java @@ -4,10 +4,10 @@ import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.shared.*; import com.zixiken.dimdoors.shared.pockets.*; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.StringUtils; -import com.zixiken.dimdoors.shared.util.TeleportUtils; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.Location; +import ddutils.StringUtils; +import ddutils.TeleportUtils; +import ddutils.WorldUtils; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; @@ -21,11 +21,11 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; -public class PocketCommand extends CommandBase { +public class CommandPocket extends CommandBase { private final List aliases; - public PocketCommand() { + public CommandPocket() { aliases = new ArrayList<>(); aliases.add("pocket"); } diff --git a/src/main/java/com/zixiken/dimdoors/shared/entities/EntityMonolith.java b/src/main/java/com/zixiken/dimdoors/shared/entities/EntityMonolith.java index 211fbbf8..9efd448f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/entities/EntityMonolith.java +++ b/src/main/java/com/zixiken/dimdoors/shared/entities/EntityMonolith.java @@ -2,8 +2,8 @@ package com.zixiken.dimdoors.shared.entities; import com.zixiken.dimdoors.shared.sound.ModSounds; import com.zixiken.dimdoors.shared.DDConfig; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.TeleportUtils; +import ddutils.Location; +import ddutils.TeleportUtils; import com.zixiken.dimdoors.shared.world.limbodimension.WorldProviderLimbo; import com.zixiken.dimdoors.shared.world.pocketdimension.WorldProviderDungeonPocket; import com.zixiken.dimdoors.shared.world.pocketdimension.WorldProviderPublicPocket; @@ -51,16 +51,13 @@ public class EntityMonolith extends EntityFlying implements IMob { setSize(WIDTH, HEIGHT); noClip = true; aggroCap = MathHelper.getInt(rand, MIN_AGGRO_CAP, MAX_AGGRO_CAP); + setEntityInvulnerable(true); } public boolean isDangerous() { return DDConfig.isMonolithTeleportationEnabled() && (world.provider instanceof WorldProviderLimbo || DDConfig.isDangerousLimboMonolithsEnabled()); } - @Override - protected void damageEntity(DamageSource damageSrc, float damageAmount) { - } - @Override public boolean attackEntityFrom(DamageSource source, float amount) { if (source != DamageSource.IN_WALL) { @@ -119,7 +116,7 @@ public class EntityMonolith extends EntityFlying implements IMob { @Override public void onEntityUpdate() { - // Remove this Monolith if it's not in Limbo or in a pocket dungeon TODO: any pocket dim? + // Remove this Monolith if it's not in Limbo or in a pocket dungeon if (!(world.provider instanceof WorldProviderLimbo || world.provider instanceof WorldProviderDungeonPocket)) { setDead(); super.onEntityUpdate(); @@ -154,7 +151,7 @@ public class EntityMonolith extends EntityFlying implements IMob { // Teleport the target player if various conditions are met if (aggro >= MAX_AGGRO && !world.isRemote && DDConfig.isMonolithTeleportationEnabled() && !player.capabilities.isCreativeMode && isDangerous()) { aggro = 0; - Location destination = WorldProviderLimbo.getLimboSkySpawn(player); // TODO: teleportToLimbo method + Location destination = WorldProviderLimbo.getLimboSkySpawn(player); TeleportUtils.teleport(player, destination, 0, 0); player.world.playSound(player, player.getPosition(), ModSounds.CRACK, SoundCategory.HOSTILE, 13, 1); } diff --git a/src/main/java/com/zixiken/dimdoors/shared/items/ItemRiftBlade.java b/src/main/java/com/zixiken/dimdoors/shared/items/ItemRiftBlade.java index ddbb2cda..2b947d0d 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/items/ItemRiftBlade.java +++ b/src/main/java/com/zixiken/dimdoors/shared/items/ItemRiftBlade.java @@ -2,9 +2,9 @@ package com.zixiken.dimdoors.shared.items; import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.shared.tileentities.TileEntityFloatingRift; -import com.zixiken.dimdoors.shared.util.Location; +import ddutils.Location; import com.zixiken.dimdoors.shared.RayTraceHelper; -import com.zixiken.dimdoors.shared.util.TeleportUtils; +import ddutils.TeleportUtils; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; diff --git a/src/main/java/com/zixiken/dimdoors/shared/pockets/Pocket.java b/src/main/java/com/zixiken/dimdoors/shared/pockets/Pocket.java index 058e1444..182d91a4 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/pockets/Pocket.java +++ b/src/main/java/com/zixiken/dimdoors/shared/pockets/Pocket.java @@ -4,11 +4,11 @@ import com.zixiken.dimdoors.shared.VirtualLocation; import com.zixiken.dimdoors.shared.rifts.RiftDestination; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; import com.zixiken.dimdoors.shared.rifts.WeightedRiftDestination; -import com.zixiken.dimdoors.shared.util.Location; +import ddutils.Location; import java.util.*; -import com.zixiken.dimdoors.shared.util.MathUtils; +import ddutils.math.MathUtils; import lombok.Getter; import lombok.Setter; import net.minecraft.entity.player.EntityPlayer; diff --git a/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketGenerator.java b/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketGenerator.java index a414503b..3dcf5970 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketGenerator.java +++ b/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketGenerator.java @@ -36,7 +36,7 @@ public class PocketGenerator { */ public Pocket generateDungeonPocket(VirtualLocation virtualLocation) { int depth = virtualLocation.getDepth(); - float netherProbability = virtualLocation.getDimID() == -1 ? 1 : (float) depth / 50; // TODO: improve nether probability + float netherProbability = virtualLocation.getDim() == -1 ? 1 : (float) depth / 50; // TODO: improve nether probability Random random = new Random(); String group = random.nextFloat() < netherProbability ? "nether" : "ruins"; PocketTemplate pocketTemplate = SchematicHandler.INSTANCE.getRandomTemplate(group, depth, DDConfig.getMaxPocketSize(), false); diff --git a/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketRegistry.java b/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketRegistry.java index a611f20f..e6d506d2 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketRegistry.java +++ b/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketRegistry.java @@ -1,11 +1,11 @@ package com.zixiken.dimdoors.shared.pockets; import com.zixiken.dimdoors.shared.DDConfig; -import com.zixiken.dimdoors.shared.VirtualLocation; -import com.zixiken.dimdoors.shared.util.Location; +import ddutils.math.GridUtils; +import ddutils.Location; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.util.NBTUtils; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.nbt.NBTUtils; +import ddutils.WorldUtils; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import java.util.HashMap; @@ -248,21 +248,4 @@ public class PocketRegistry extends WorldSavedData { return pocket.isPlayerAllowedInPocket(player) && pocket.isLocationWithinPocketBounds(x, y, z, gridSize); } } - - // TODO: move to VirtualLocation - public static VirtualLocation locationToVirtualLocation(Location location) { // TODO: reverse function too - VirtualLocation virtualLocation = null; - if (DimDoorDimensions.isPocketDimension(location.getDimID())) { - Pocket pocket = PocketRegistry.getForDim(location.getDimID()).getPocketFromLocation(location.getPos().getY(), location.getPos().getY(), location.getPos().getZ()); - if (pocket != null) { - virtualLocation = pocket.getVirtualLocation(); - } else { - virtualLocation = new VirtualLocation(0, 0, 0, 0, 0); // TODO: door was placed in a pocket dim but outside of a pocket... - } - } - if (virtualLocation == null) { - virtualLocation = new VirtualLocation(WorldUtils.getDim(location.getWorld()), location.getPos().getX(), location.getPos().getY(), location.getPos().getZ(), 0); - } - return virtualLocation; - } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketTemplate.java b/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketTemplate.java index c3cd75e8..78688ff6 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketTemplate.java +++ b/src/main/java/com/zixiken/dimdoors/shared/pockets/PocketTemplate.java @@ -1,8 +1,8 @@ package com.zixiken.dimdoors.shared.pockets; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.Schematic; +import ddutils.Location; +import ddutils.schem.Schematic; import com.zixiken.dimdoors.DimDoors; import java.util.ArrayList; @@ -44,7 +44,7 @@ public class PocketTemplate { int dimID = pocket.dimID; int xBase = pocket.getX() * gridSize * 16; int zBase = pocket.getZ() * gridSize * 16; - DimDoors.log.info("Placing new pocket using schematic " + schematic.getSchematicName() + " at x = " + xBase + ", z = " + zBase); + DimDoors.log.info("Placing new pocket using schematic " + schematic.schematicName + " at x = " + xBase + ", z = " + zBase); WorldServer world = DimDoors.proxy.getWorldServer(dimID); DimDoors.disableRiftSetup = true; @@ -53,7 +53,7 @@ public class PocketTemplate { // Set pocket riftLocations pocket.riftLocations = new ArrayList<>(); - for (NBTTagCompound tileEntityNBT : schematic.getTileEntities()) { + for (NBTTagCompound tileEntityNBT : schematic.tileEntities) { BlockPos pos = new BlockPos( xBase + tileEntityNBT.getInteger("x"), yBase + tileEntityNBT.getInteger("y"), diff --git a/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftDestination.java b/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftDestination.java index b6d48b05..c291231c 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftDestination.java +++ b/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftDestination.java @@ -1,8 +1,8 @@ package com.zixiken.dimdoors.shared.rifts; -import com.zixiken.dimdoors.shared.util.INBTStorable; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.NBTUtils; +import ddutils.nbt.INBTStorable; +import ddutils.Location; +import ddutils.nbt.NBTUtils; import lombok.*; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; @@ -14,13 +14,14 @@ import java.util.LinkedList; import java.util.List; import java.util.UUID; +@SuppressWarnings("EmptyMethod") @Getter @ToString @EqualsAndHashCode @AllArgsConstructor(access = AccessLevel.PRIVATE) public /*abstract*/ class RiftDestination implements INBTStorable { // TODO: fix lombok and make this abstract @Getter private EnumType type; @Getter protected RiftDestination oldDestination; public enum EnumType { - RELATIVE, LOCAL, GLOBAL, NEW_PUBLIC, PRIVATE, LIMBO, AVAILABLE_LINK, POCKET_ENTRANCE, POCKET_EXIT, PRIVATE_POCKET_EXIT, ESCAPE; + RELATIVE, LOCAL, GLOBAL, NEW_PUBLIC, PRIVATE, LIMBO, AVAILABLE_LINK, POCKET_ENTRANCE, POCKET_EXIT, PRIVATE_POCKET_EXIT, ESCAPE } private RiftDestination() { @@ -188,7 +189,7 @@ public /*abstract*/ class RiftDestination implements INBTStorable { // TODO: fix public static class GlobalDestination extends RiftDestination { // TODO: location directly in nbt like minecraft? private Location loc; - private GlobalDestination() {}; + private GlobalDestination() {} @Override public void readFromNBT(NBTTagCompound nbt) { diff --git a/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftRegistry.java b/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftRegistry.java index 1194409c..6da89cd1 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftRegistry.java +++ b/src/main/java/com/zixiken/dimdoors/shared/rifts/RiftRegistry.java @@ -3,9 +3,9 @@ package com.zixiken.dimdoors.shared.rifts; import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.shared.VirtualLocation; import com.zixiken.dimdoors.shared.rifts.RiftRegistry.RiftInfo.AvailableLinkInfo; -import com.zixiken.dimdoors.shared.util.INBTStorable; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.nbt.INBTStorable; +import ddutils.Location; +import ddutils.WorldUtils; import lombok.*; import lombok.experimental.Wither; import net.minecraft.nbt.NBTBase; @@ -31,7 +31,7 @@ public class RiftRegistry extends WorldSavedData { private World world; @lombok.AllArgsConstructor @lombok.EqualsAndHashCode @lombok.Builder(toBuilder = true) - public static class RiftInfo implements com.zixiken.dimdoors.shared.util.INBTStorable { + public static class RiftInfo implements ddutils.nbt.INBTStorable { @Builder.Default @Getter private Set availableLinks = new HashSet<>(); // ignore intellij warnings, builder needs these @Builder.Default @Getter private Set sources = new HashSet<>(); @Builder.Default @Getter private Set destinations = new HashSet<>(); @@ -133,7 +133,7 @@ public class RiftRegistry extends WorldSavedData { } public void initNewRegistry() { - + // TODO } @Override @@ -304,7 +304,7 @@ public class RiftRegistry extends WorldSavedData { } public static RiftRegistry getRegistry(Location rift) { - return getForDim(rift.getDimID()); + return getForDim(rift.getDim()); } public Location getPrivatePocketEntrance(String playerUUID) { diff --git a/src/main/java/com/zixiken/dimdoors/shared/rifts/TileEntityRift.java b/src/main/java/com/zixiken/dimdoors/shared/rifts/TileEntityRift.java index 3a52ffc6..57899334 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/rifts/TileEntityRift.java +++ b/src/main/java/com/zixiken/dimdoors/shared/rifts/TileEntityRift.java @@ -7,10 +7,10 @@ import com.zixiken.dimdoors.shared.pockets.PocketGenerator; import com.zixiken.dimdoors.shared.pockets.PocketRegistry; import com.zixiken.dimdoors.shared.rifts.RiftDestination.*; import com.zixiken.dimdoors.shared.rifts.RiftRegistry.RiftInfo.AvailableLinkInfo; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.MathUtils; -import com.zixiken.dimdoors.shared.util.TeleportUtils; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.Location; +import ddutils.math.MathUtils; +import ddutils.TeleportUtils; +import ddutils.WorldUtils; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import lombok.Getter; import net.minecraft.block.state.IBlockState; @@ -325,7 +325,7 @@ public abstract class TileEntityRift extends TileEntity implements ITickable { / } if (destLoc == null) { if (entity instanceof EntityPlayer) DimDoors.chat((EntityPlayer) entity, "You tried to escape a pocket or leave your private pocket, but you teleported into it!"); - return false; // TODO: LIMBO? + return false; // TODO: limbo? } } else { return false; // Non-player/owned entity tried to escape/leave private pocket @@ -424,7 +424,7 @@ public abstract class TileEntityRift extends TileEntity implements ITickable { / private void makeDestinationPermanent(WeightedRiftDestination weightedDestination, Location destLoc) { riftStateChanged = true; RiftDestination newDest; - if (WorldUtils.getDim(world) == destLoc.getDimID()) { + if (WorldUtils.getDim(world) == destLoc.getDim()) { newDest = new LocalDestination(destLoc.getPos()); // TODO: RelativeDestination instead? } else { newDest = new GlobalDestination(destLoc); diff --git a/src/main/java/com/zixiken/dimdoors/shared/rifts/WeightedRiftDestination.java b/src/main/java/com/zixiken/dimdoors/shared/rifts/WeightedRiftDestination.java index 741400de..212bba72 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/rifts/WeightedRiftDestination.java +++ b/src/main/java/com/zixiken/dimdoors/shared/rifts/WeightedRiftDestination.java @@ -1,6 +1,6 @@ package com.zixiken.dimdoors.shared.rifts; -import com.zixiken.dimdoors.shared.util.INBTStorable; +import ddutils.nbt.INBTStorable; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; diff --git a/src/main/java/com/zixiken/dimdoors/shared/tileentities/TileEntityEntranceRift.java b/src/main/java/com/zixiken/dimdoors/shared/tileentities/TileEntityEntranceRift.java index cdd2686c..45d3adb3 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/tileentities/TileEntityEntranceRift.java +++ b/src/main/java/com/zixiken/dimdoors/shared/tileentities/TileEntityEntranceRift.java @@ -2,10 +2,10 @@ package com.zixiken.dimdoors.shared.tileentities; import com.zixiken.dimdoors.shared.pockets.PocketRegistry; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; -import com.zixiken.dimdoors.shared.util.Location; -import com.zixiken.dimdoors.shared.util.RGBA; -import com.zixiken.dimdoors.shared.util.TeleportUtils; -import com.zixiken.dimdoors.shared.util.WorldUtils; +import ddutils.Location; +import ddutils.render.RGBA; +import ddutils.TeleportUtils; +import ddutils.WorldUtils; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import lombok.Getter; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/PocketSchematicGenerator.java b/src/main/java/com/zixiken/dimdoors/shared/tools/PocketSchematicGenerator.java similarity index 98% rename from src/main/java/com/zixiken/dimdoors/shared/util/PocketSchematicGenerator.java rename to src/main/java/com/zixiken/dimdoors/shared/tools/PocketSchematicGenerator.java index 897fb18e..5a2c983c 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/PocketSchematicGenerator.java +++ b/src/main/java/com/zixiken/dimdoors/shared/tools/PocketSchematicGenerator.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.util; +package com.zixiken.dimdoors.shared.tools; import com.zixiken.dimdoors.DimDoors; import com.zixiken.dimdoors.server.DDProxyServer; @@ -7,6 +7,7 @@ import com.zixiken.dimdoors.shared.blocks.ModBlocks; import com.zixiken.dimdoors.shared.rifts.RiftDestination; import com.zixiken.dimdoors.shared.rifts.TileEntityRift; import com.zixiken.dimdoors.shared.rifts.WeightedRiftDestination; +import ddutils.schem.Schematic; import net.minecraft.block.Block; import net.minecraft.block.BlockDoor; import net.minecraft.block.state.IBlockState; @@ -21,6 +22,7 @@ import net.minecraftforge.fml.common.ModContainer; import net.minecraftforge.fml.common.ModMetadata; import net.minecraftforge.registries.GameData; import net.minecraftforge.registries.RegistryManager; +import ddutils.math.MathUtils; import java.io.DataOutputStream; import java.io.File; @@ -32,7 +34,6 @@ import java.util.Collections; import java.util.List; /** - * * @author Robijnvogel */ public class PocketSchematicGenerator { diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/SchematicConverter.java b/src/main/java/com/zixiken/dimdoors/shared/tools/SchematicConverter.java similarity index 61% rename from src/main/java/com/zixiken/dimdoors/shared/util/SchematicConverter.java rename to src/main/java/com/zixiken/dimdoors/shared/tools/SchematicConverter.java index 5b677d7c..3d826318 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/SchematicConverter.java +++ b/src/main/java/com/zixiken/dimdoors/shared/tools/SchematicConverter.java @@ -1,7 +1,9 @@ -package com.zixiken.dimdoors.shared.util; +package com.zixiken.dimdoors.shared.tools; import com.zixiken.dimdoors.DimDoors; +import com.zixiken.dimdoors.shared.blocks.BlockFabric; import com.zixiken.dimdoors.shared.blocks.ModBlocks; +import ddutils.schem.Schematic; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.nbt.NBTTagCompound; @@ -13,60 +15,47 @@ import java.util.HashMap; import java.util.Map; /** - * * @author Robijnvogel */ public class SchematicConverter { - private static final String[] OLDDIMDOORBLOCKNAMES = { - "Dimensional Door", - "Fabric of Reality", - "transientDoor", //only used in the two old Overworld gateway (worldgen) structures - "Warp Door"}; - private static final String[] NEWDIMDOORBLOCKNAMES = { - "dimensional_door", - "fabric", //[type=fabric] is the default blockstate - "transient_dimensional_door", - "warp_dimensional_door"}; + private static final Map stateMap = new HashMap<>(); + static { + stateMap.put("dimdoors:Dimensional Door", ModBlocks.DIMENSIONAL_DOOR.getDefaultState()); + stateMap.put("dimdoors:Fabric of Reality", ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.TYPE, BlockFabric.EnumType.REALITY)); + stateMap.put("dimdoors:Fabric of RealityPerm", ModBlocks.FABRIC.getDefaultState().withProperty(BlockFabric.TYPE, BlockFabric.EnumType.ANCIENT)); + stateMap.put("dimdoors:transientDoor", ModBlocks.TRANSIENT_DIMENSIONAL_DOOR.getDefaultState()); + stateMap.put("dimdoors:Warp Door", ModBlocks.WARP_DIMENSIONAL_DOOR.getDefaultState()); + } - public static Schematic loadOldDimDoorSchematicFromNBT(NBTTagCompound nbt, String parName) { //@todo, maybe make this a separate class, so values can be final so they HAVE TO be set in a newly designed constructor? + public static Schematic convertSchematic(NBTTagCompound nbt, String name) { //@todo, maybe make this a separate class, so values can be final so they HAVE TO be set in a newly designed constructor? Schematic schematic = new Schematic(); - //schematic.version = 1; //already the default value - //schematic.author = "DimDoors"; //already the default value - schematic.schematicName = parName.equals("") ? "Auto-converted-DimDoors-for-MC-1.7.10-schematic" : parName; + schematic.version = 1; //already the default value + schematic.author = "DimDoors"; // TODO: didn't the old schematics have an author? + schematic.schematicName = name.equals("") ? "Unknown" : name; schematic.creationDate = System.currentTimeMillis(); schematic.requiredMods = new String[]{DimDoors.MODID}; schematic.width = nbt.getShort("Width"); schematic.height = nbt.getShort("Height"); schematic.length = nbt.getShort("Length"); - //schematic.offset = new int[]{0, 0, 0}; //already the default value + schematic.offset = new int[]{0, 0, 0}; // TODO: center them byte[] blockIntArray = nbt.getByteArray("Blocks"); if (nbt.hasKey("Palette")) { NBTTagList paletteNBT = (NBTTagList) nbt.getTag("Palette"); for (int i = 0; i < paletteNBT.tagCount(); i++) { - //DimDoors.log.info("reading pallete from schematic... i = " + i); String blockString = paletteNBT.getStringTagAt(i); - boolean isAncientFabric = false; - if (blockString.startsWith("dimdoors")) { - String dimdoorsBlockName = blockString.split(":")[1]; - if (dimdoorsBlockName.equals("Fabric of RealityPerm")) { //only special case, because this is now another state of another block - isAncientFabric = true; - } else { - dimdoorsBlockName = convertOldDimDoorsBlockNameToNewDimDoorsBlockName(dimdoorsBlockName); - blockString = "dimdoors:" + dimdoorsBlockName; - } - } IBlockState blockstate; - if (!isAncientFabric) { - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockString)); - blockstate = block.getDefaultState(); + + // Get the correct block state + if (blockString.startsWith("dimdoors")) { + blockstate = stateMap.get(blockString); } else { - Block block = ForgeRegistries.BLOCKS.getValue(new ResourceLocation("dimdoors:FABRIC")); - blockstate = Schematic.getBlockStateWithProperties(block, new String[]{"type=ancient"}); + blockstate = ForgeRegistries.BLOCKS.getValue(new ResourceLocation(blockString)).getDefaultState(); } + schematic.pallette.add(blockstate); } } else { @@ -97,7 +86,7 @@ public class SchematicConverter { block = ModBlocks.TRANSIENT_DIMENSIONAL_DOOR; break; } - //if (id != 0 && block.getRegistryName().toString().equals("minecraft:air")) throw new RuntimeException("Change conversion code!"); + if (id != 0 && block.getRegistryName().toString().equals("minecraft:air")) throw new RuntimeException("Change conversion code!"); schematic.pallette.add(block.getDefaultState()); palletteMap.put(id, currentPalletteIndex); blockIntArray[i] = currentPalletteIndex; @@ -116,7 +105,7 @@ public class SchematicConverter { IBlockState baseState = schematic.pallette.get(blockInt); //this is the default blockstate except for ancient fabric if (baseState == baseState.getBlock().getDefaultState()) { //should only be false if {@code baseState} is ancient fabric - IBlockState additionalState = baseState.getBlock().getStateFromMeta(metadata); // TODO: this was getStateFromMeta(metadata), but that method got deprecated and just calls getDefaultState(). Is this right? + IBlockState additionalState = baseState.getBlock().getStateFromMeta(metadata); if (schematic.pallette.contains(additionalState)) { //check whether or not this blockstate is already in the list blockInt = schematic.pallette.indexOf(additionalState); } else { @@ -124,7 +113,7 @@ public class SchematicConverter { // DimDoors.log.info("New blockstate detected. Original blockInt = " + blockInt + " and baseState is " + baseState); blockInt = schematic.pallette.size() - 1; } - } else { //if this is ancient fabric + } else { // if this is ancient fabric // DimDoors.log.info("Non-default blockstate in palette detected. Original blockInt = " + blockInt + " and baseState is " + baseState.toString()); //@todo should only print a line on load of ancient fabric blockInt = schematic.pallette.indexOf(baseState); } @@ -142,23 +131,4 @@ public class SchematicConverter { return schematic; } - - private static String convertOldDimDoorsBlockNameToNewDimDoorsBlockName(String dimdoorsBlockName) { - if (OLDDIMDOORBLOCKNAMES.length != NEWDIMDOORBLOCKNAMES.length) { - DimDoors.log.error("The array of old DimDoors block names somehow isn't the same length as the array of new names, therefore the dimdoors blocks in this schematic will not be loaded. This is a bug in the DimDoors mod itself."); - return null; - } - - int i = 0; - for (; i < OLDDIMDOORBLOCKNAMES.length; i++) { - if (OLDDIMDOORBLOCKNAMES[i].equals(dimdoorsBlockName)) { - return NEWDIMDOORBLOCKNAMES[i]; - } else { - if (i == OLDDIMDOORBLOCKNAMES.length - 1) { - DimDoors.log.warn(dimdoorsBlockName + " as an old dimdoors block name is unknown."); - } - } - } - return null; - } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/MathUtils.java b/src/main/java/com/zixiken/dimdoors/shared/util/MathUtils.java deleted file mode 100644 index c3c0d06b..00000000 --- a/src/main/java/com/zixiken/dimdoors/shared/util/MathUtils.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.zixiken.dimdoors.shared.util; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Random; - -/** - * - * @author Robijnvogel - */ -public class MathUtils { - - /** - * Compares the integers in two arrays and returns true if any integer in - * the first set is within range 0 to {@code difference} - 1 of any integer - * in the second array. - * - * @param setOne the first integer array to compare - * @param difference see method description - * @param setTwo the second integer array to compare - * @pre difference >= 0 - * @throws IllegalArgumentException if precondition is violated - * @return {@code (\exists i, j; ; abs(setOne[i] - setTwo[j]) < difference } - */ - public static boolean withinDistanceOf(int[] setOne, int difference, int[] setTwo) throws IllegalArgumentException { - if (difference < 0) { - throw new IllegalArgumentException("precondition was violated"); - } - for (int one : setOne) { - for (int two : setTwo) { - if (Math.max(one, two) - Math.min(one, two) < difference) { - return true; - } - } - } - return false; - } - - /** - * Returns the sum of the values of all integer elements in an integer array - * - * @param intArray the integers to calculate the sum of - * @param flag this flag is meant to check if all elements in the array must - * be positive (0), negative(1), or it doesn't matter (anything else) - * @pre - * {@code (flag != 0 && flag != 1) || (flag == 0 && (\forall i; intArray.has(i); i >= 0)) || (flag == 1 && (\forall i; intArray.has(i); i <= 0))} - * @throws IllegalArgumentException if precondition is violated - * @return {@code sum(i = 0; intArray.has(i); intArray[i]) } - */ - public static int arraySum(int[] intArray, short flag) { - int r = 0; - for (int i : intArray) { //check flag - if (flag == 0 && i < 0) { - throw new IllegalArgumentException("all integers in array must be positive"); - } else if (flag == 1 && i > 0) { - throw new IllegalArgumentException("all integers in array must be negative"); - } - r += i; - } - return r; - } - - public static T weightedRandom(Map weights) { - if (weights.size() == 0) return null; - int totalWeight = 0; - for (float weight : weights.values()) { - totalWeight += weight; - } - Random random = new Random(); - float f = random.nextFloat() * totalWeight; - for (Map.Entry e : weights.entrySet()) { - f -= e.getValue(); - if (f < 0) return e.getKey(); - } - return null; - } - - public static List listFrom(T element) { - List list = new ArrayList<>(); - list.add(element); - return list; - } -} diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/RandomUtils.java b/src/main/java/com/zixiken/dimdoors/shared/util/RandomUtils.java deleted file mode 100644 index 9b636d3d..00000000 --- a/src/main/java/com/zixiken/dimdoors/shared/util/RandomUtils.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.zixiken.dimdoors.shared.util; - -import com.zixiken.dimdoors.DimDoors; -import java.util.Random; -import net.minecraft.util.EnumFacing; - -/** - * @author Robijnvogel - */ -public class RandomUtils { - - /** - * Returns either true or false, based on a weighted random, taking in - * account the parameters as the weights for true and false as outcomes. For - * instance: (2, 3) should return true in 40% of the cases and false in 60% - * of the cases. - * - * @param trueWeight the chance weight that this method will return true - * @param falseWeight the chance weight that this method will return false - * @pre {@code trueWeight > 0 && falseWeight > 0} - * @throws IllegalArgumentException if precondition is violated - * @return true or false - */ - public static boolean weightedBoolean(int trueWeight, int falseWeight) { //@todo make this a utility function - if (trueWeight <= 0 || falseWeight <= 0) { - throw new IllegalArgumentException("Either of both weights were 0 or lower. Both should be at least 1."); - } - Random random = new Random(); - return random.nextInt(trueWeight + falseWeight) < trueWeight; - } - - /** - * This method returns the sum of {@code base} and a random element of - * {@code transformations} the weight of each of the entries in - * - * @param base the base value to transform from - * @param transformations the possible transformations - * @param weights the chance-weight of those transformations - * @pre {@code transformations.length = weights.length} && {@code (\forall i; intArray.has(i); i >= 0)} - * && {@code MathUtils.arraySum(weights, 1) > 0} - * @throws IllegalArgumentException if precondition is violated - * @return the sum of {@code base} and the value of an element in - * {@code transformations} - */ - public static int transformRandomly(int base, int[] transformations, int[] weights) { - if (transformations.length != weights.length) { - throw new IllegalArgumentException("pre was violated, transformations.length != weights.length"); - } - Random random = new Random(); - int weightSum = MathUtils.arraySum(weights, (short) 0); - if (weightSum <= 0) { - throw new IllegalArgumentException("pre was violated, MathUtils.arraySum(weights, 1) <= 0"); - } - int choice = random.nextInt(weightSum); - for (int i = 0; i < weights.length; i++) { - choice -= weights[i]; - if (choice < 0) { - return base + transformations[i]; - } - } - throw new IllegalStateException(""); - } - - /** - * This method returns a Location that is determined by offsetting - * origLocation in the x and z direction by a randomly positive or negative - * random integer value, both based on the formula: - * {@code randomInt((base * depth) ^ power)} - * - * @param base this value is configured in the config files of DimDoors - * @param power this value is configured in the config files of DimDoors - * @param depth this should be the depth of the newly generated dungeon - * pocket - * @pre {@code base > 0 && depth > 0 && power >= 0 && origLocation != null} - * @throws IllegalArgumentException if pre is violated - * @param origLocation the original location to offset from - * @return a Location for which the x and z coordinates have both been - * offset by random values between {@code -(base * depth) ^ power)} and - * {@code ((base * depth) ^ power)} and y and dimensionID are the same as - * {@code origLocation}'s - */ - public static Location transformLocationRandomly(int base, double power, int depth, Location origLocation) { - if (base <= 0 || depth <= 0 || power < 0 || origLocation == null) { - throw new IllegalArgumentException("pre was violated"); - } - Random random = new Random(); - DimDoors.log.info("base = " + base + ", power = " + power + ", depth = " + depth + " and power is " + Math.pow(base * depth, power)); - int xOffset = random.nextInt((int) Math.pow(base * depth, power)) * (random.nextBoolean() ? 1 : -1); - int zOffset = random.nextInt((int) Math.pow(base * depth, power)) * (random.nextBoolean() ? 1 : -1); - return new Location(origLocation.getWorld(), origLocation.getPos().offset(EnumFacing.EAST, xOffset).offset(EnumFacing.SOUTH, zOffset)); - } -} diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/DimDoorDimensions.java b/src/main/java/com/zixiken/dimdoors/shared/world/DimDoorDimensions.java index 16e6f2b1..9f509c69 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/DimDoorDimensions.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/DimDoorDimensions.java @@ -17,7 +17,7 @@ import net.minecraftforge.common.DimensionManager; public class DimDoorDimensions { - public static DimensionType LIMBO = null; + public static DimensionType limbo = null; @Getter private static int minPocketDimID; @Getter private static int maxPocketDimID; private static final List pocketTypes = new ArrayList<>(); @@ -32,7 +32,7 @@ public class DimDoorDimensions { // Lowercase names because all minecraft dimensions are lowercase, _pockets suffix to make it clear what the world is minPocketDimID = DDConfig.getBaseDimID(); int dimID = minPocketDimID; - LIMBO = DimensionType.register("limbo", "_limbo", dimID, WorldProviderLimbo.class, false); + limbo = DimensionType.register("limbo", "_limbo", dimID, WorldProviderLimbo.class, false); limboDimID = dimID++; pocketTypes.add(EnumPocketType.PRIVATE); pocketDimensionTypes.put(EnumPocketType.PRIVATE, DimensionType.register("private_pockets", "_private", dimID, WorldProviderPersonalPocket.class, false)); @@ -45,7 +45,7 @@ public class DimDoorDimensions { pocketDimensionTypes.put(EnumPocketType.DUNGEON, DimensionType.register("dungeon_pockets", "_dungeon", dimID, WorldProviderDungeonPocket.class, false)); dungeonDimID = dimID; - registerDimension(LIMBO); + registerDimension(limbo); for (EnumPocketType pocketType : pocketDimensionTypes.keySet()) { registerDimension(pocketDimensionTypes.get(pocketType)); } diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseGateway.java b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseGateway.java index 30db93cf..ad7c5282 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseGateway.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseGateway.java @@ -5,7 +5,7 @@ import net.minecraft.world.World; import net.minecraft.world.biome.Biome; public abstract class BaseGateway { - public BaseGateway() { } + public BaseGateway() {} /** * Generates the gateway centered on the given coordinates @@ -22,7 +22,7 @@ public abstract class BaseGateway { * @return true true if the specified biome is a valid for generating this gateway, otherwise false */ protected boolean isBiomeValid(Biome biome) { - Biome[] biomes = this.getBiomes(); + Biome[] biomes = getBiomes(); if (biomes != null) { for (Biome b : biomes) { if (b.equals(biome)) { diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseSchematicGateway.java b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseSchematicGateway.java index 025e18dd..be12a611 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseSchematicGateway.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/BaseSchematicGateway.java @@ -1,8 +1,8 @@ package com.zixiken.dimdoors.shared.world.gateways; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.shared.util.Schematic; -import com.zixiken.dimdoors.shared.util.SchematicConverter; +import ddutils.schem.Schematic; +import com.zixiken.dimdoors.shared.tools.SchematicConverter; import net.minecraft.nbt.CompressedStreamTools; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; @@ -35,7 +35,7 @@ public abstract class BaseSchematicGateway extends BaseGateway { if (streamOpened) { try { schematicNBT = CompressedStreamTools.readCompressed(schematicDataStream); - schematic = SchematicConverter.loadOldDimDoorSchematicFromNBT(schematicNBT, name); + schematic = SchematicConverter.convertSchematic(schematicNBT, name); schematicDataStream.close(); } catch (IOException ex) { DimDoors.log.error("Schematic file for " + name + " could not be read as a valid schematic NBT file.", ex); diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayGenerator.java b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayGenerator.java index 2e4cc342..38688964 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayGenerator.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayGenerator.java @@ -33,7 +33,7 @@ public class GatewayGenerator implements IWorldGenerator private BaseGateway defaultGateway; public GatewayGenerator() { - this.initialize(); + initialize(); } private void initialize() { @@ -51,7 +51,7 @@ public class GatewayGenerator implements IWorldGenerator // Also don't generate anything in the Nether, The End, or in Witchery's Spirit World. // We only match against Spirit World using hashing to speed up the process a little (hopefully). int dimensionID = world.provider.getDimension(); - if (world.isRemote || (world.provider instanceof WorldProviderPocket) || (dimensionID == END_DIMENSION_ID) || (dimensionID == NETHER_DIMENSION_ID)) { + if (world.isRemote || world.provider instanceof WorldProviderPocket || dimensionID == END_DIMENSION_ID || dimensionID == NETHER_DIMENSION_ID) { return; } @@ -99,7 +99,7 @@ public class GatewayGenerator implements IWorldGenerator // Build the gateway if we found a valid location if (valid) { - ArrayList validGateways = new ArrayList(); + ArrayList validGateways = new ArrayList<>(); for (BaseGateway gateway : gateways) { if (gateway.isLocationValid(world, x, y, z)) { validGateways.add(gateway); @@ -119,11 +119,11 @@ public class GatewayGenerator implements IWorldGenerator //Check if the point is within the acceptable altitude range, the block above that point is empty, //and the block two levels down is opaque and has a reasonable material. Plus that we're not building //on top of bedrock. - return (pos.getY() >= MIN_RIFT_Y && pos.getY() <= MAX_RIFT_Y && + return pos.getY() >= MIN_RIFT_Y && pos.getY() <= MAX_RIFT_Y && world.isAirBlock(pos.up()) && world.getBlockState(pos).getBlock() != Blocks.BEDROCK && //<-- Stops Nether roof spawning. DO NOT REMOVE! world.getBlockState(pos.down()) != Blocks.BEDROCK && - checkFoundationMaterial(world, pos.down())); + checkFoundationMaterial(world, pos.down()); } private static boolean checkFoundationMaterial(World world, BlockPos pos) { @@ -131,7 +131,7 @@ public class GatewayGenerator implements IWorldGenerator //or on top of strange things like tall grass, water, slabs, or torches. //We also want to avoid generating things on top of the Nether's bedrock! Material material = world.getBlockState(pos).getMaterial(); - return (material != Material.LEAVES && material != Material.WOOD && material != Material.GOURD - && world.isBlockNormalCube(pos, false) && world.getBlockState(pos).getBlock() != Blocks.BEDROCK); + return material != Material.LEAVES && material != Material.WOOD && material != Material.GOURD + && world.isBlockNormalCube(pos, false) && world.getBlockState(pos).getBlock() != Blocks.BEDROCK; } } \ No newline at end of file diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayTwoPillars.java b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayTwoPillars.java index 5676df70..08808352 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayTwoPillars.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/gateways/GatewayTwoPillars.java @@ -1,6 +1,6 @@ package com.zixiken.dimdoors.shared.world.gateways; -import net.minecraft.block.state.IBlockState; +import net.minecraft.block.BlockStoneBrick; import net.minecraft.init.Blocks; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -14,8 +14,6 @@ public class GatewayTwoPillars extends BaseSchematicGateway { @Override protected void generateRandomBits(World world, int x, int y, int z) { - IBlockState state = Blocks.STONEBRICK.getDefaultState(); - //Replace some of the ground around the gateway with bricks for (int xc = -GATEWAY_RADIUS; xc <= GATEWAY_RADIUS; xc++) { for (int zc = -GATEWAY_RADIUS; zc <= GATEWAY_RADIUS; zc++) { @@ -27,10 +25,10 @@ public class GatewayTwoPillars extends BaseSchematicGateway { //chances of placing a block decrease as we get farther from the gateway's center. if (Math.abs(xc) + Math.abs(zc) < world.rand.nextInt(2) + 3) { //Place Stone Bricks - world.setBlockState(new BlockPos(x + xc, y, z + zc), state); + world.setBlockState(new BlockPos(x + xc, y, z + zc), Blocks.STONEBRICK.getDefaultState()); } else if (Math.abs(xc) + Math.abs(zc) < world.rand.nextInt(3) + 3) { //Place Cracked Stone Bricks - world.setBlockState(new BlockPos(x + xc, y, z + zc), state); //TODO find out what the data for cracked Stonebrick is. + world.setBlockState(new BlockPos(x + xc, y, z + zc), Blocks.STONEBRICK.getDefaultState().withProperty(BlockStoneBrick.VARIANT, BlockStoneBrick.EnumType.CRACKED)); } } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/LimboDecay.java b/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/LimboDecay.java index 82c0effc..b377a1a4 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/LimboDecay.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/LimboDecay.java @@ -93,7 +93,7 @@ public class LimboDecay { int x, y, z; int sectionY; int limboHeight; - int[] limbo = DimensionManager.getDimensions(DimDoorDimensions.LIMBO); + int[] limbo = DimensionManager.getDimensions(DimDoorDimensions.limbo); for (Integer i : limbo){ diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/WorldProviderLimbo.java b/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/WorldProviderLimbo.java index a2ea959e..b674772f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/WorldProviderLimbo.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/limbodimension/WorldProviderLimbo.java @@ -1,10 +1,10 @@ package com.zixiken.dimdoors.shared.world.limbodimension; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.client.CloudRenderBlank; +import ddutils.render.CloudRenderBlank; import com.zixiken.dimdoors.shared.blocks.BlockFabric; import com.zixiken.dimdoors.shared.blocks.ModBlocks; -import com.zixiken.dimdoors.shared.util.Location; +import ddutils.Location; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import com.zixiken.dimdoors.shared.world.ModBiomes; import net.minecraft.entity.Entity; @@ -85,7 +85,7 @@ public class WorldProviderLimbo extends WorldProvider { public static Location getLimboSkySpawn(EntityPlayer player) { int x = (int) player.posX + MathHelper.clamp(player.world.rand.nextInt(), -100, 100); // TODO: -properties.LimboEntryRange, properties.LimboEntryRange); int z = (int) player.posZ + MathHelper.clamp(player.world.rand.nextInt(), -100, 100); // TODO: -properties.LimboEntryRange, properties.LimboEntryRange); - return new Location(DimDoorDimensions.LIMBO.getId(), x, 700, z); + return new Location(DimDoorDimensions.limbo.getId(), x, 700, z); } @Override @@ -97,7 +97,7 @@ public class WorldProviderLimbo extends WorldProvider { @Override public DimensionType getDimensionType() { - return DimDoorDimensions.LIMBO; + return DimDoorDimensions.limbo; } diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderDungeonPocket.java b/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderDungeonPocket.java index dbb7cfb2..8954473f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderDungeonPocket.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderDungeonPocket.java @@ -1,6 +1,6 @@ package com.zixiken.dimdoors.shared.world.pocketdimension; -import com.zixiken.dimdoors.client.CloudRenderBlank; +import ddutils.render.CloudRenderBlank; import com.zixiken.dimdoors.shared.pockets.EnumPocketType; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import com.zixiken.dimdoors.shared.world.ModBiomes; @@ -26,7 +26,7 @@ public class WorldProviderDungeonPocket extends WorldProviderPocket { @Override public int getRespawnDimension(EntityPlayerMP player) { - return DimDoorDimensions.LIMBO.getId(); + return DimDoorDimensions.limbo.getId(); } @SideOnly(Side.CLIENT) diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java b/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java index e389db91..ba3ca30e 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPocket.java @@ -1,7 +1,7 @@ package com.zixiken.dimdoors.shared.world.pocketdimension; import com.zixiken.dimdoors.DimDoors; -import com.zixiken.dimdoors.client.CloudRenderBlank; +import ddutils.render.CloudRenderBlank; import com.zixiken.dimdoors.shared.pockets.EnumPocketType; import com.zixiken.dimdoors.shared.world.DimDoorDimensions; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPublicPocket.java b/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPublicPocket.java index 047dbc18..f97c3dd1 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPublicPocket.java +++ b/src/main/java/com/zixiken/dimdoors/shared/world/pocketdimension/WorldProviderPublicPocket.java @@ -1,6 +1,6 @@ package com.zixiken.dimdoors.shared.world.pocketdimension; -import com.zixiken.dimdoors.client.CloudRenderBlank; +import ddutils.render.CloudRenderBlank; import com.zixiken.dimdoors.shared.pockets.EnumPocketType; import com.zixiken.dimdoors.shared.world.ModBiomes; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/Location.java b/src/main/java/ddutils/Location.java similarity index 74% rename from src/main/java/com/zixiken/dimdoors/shared/util/Location.java rename to src/main/java/ddutils/Location.java index a1b847d4..b0048d55 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/Location.java +++ b/src/main/java/ddutils/Location.java @@ -1,10 +1,9 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils; -import com.zixiken.dimdoors.DimDoors; import java.io.Serializable; -import lombok.Getter; import lombok.ToString; +import lombok.Value; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; @@ -12,16 +11,16 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.WorldServer; +import net.minecraftforge.common.DimensionManager; /** - * * @author Robijnvogel */ -@ToString +@ToString @Value public class Location implements Serializable { - @Getter private int dimID; // TODO: remove getter and make final? - @Getter private BlockPos pos; + int dim; + private BlockPos pos; public Location(World world, BlockPos pos) { this(world.provider.getDimension(), pos); @@ -31,15 +30,19 @@ public class Location implements Serializable { this(world, new BlockPos(x, y, z)); } - public Location(int dimID, int x, int y, int z) { - this(dimID, new BlockPos(x, y, z)); + public Location(int dim, int x, int y, int z) { + this(dim, new BlockPos(x, y, z)); } - public Location(int dimID, BlockPos pos) { - this.dimID = dimID; - this.pos = pos; //copyOf + public Location(int dim, BlockPos pos) { + this.dim = dim; + this.pos = pos; } + public int getX() { return pos.getX(); } + public int getY() { return pos.getY(); } + public int getZ() { return pos.getZ(); } + public TileEntity getTileEntity() { return getWorld().getTileEntity(pos); } @@ -49,7 +52,7 @@ public class Location implements Serializable { } public WorldServer getWorld() { - return DimDoors.proxy.getWorldServer(dimID); + return DimensionManager.getWorld(dim); } public static Location getLocation(TileEntity tileEntity) { @@ -66,7 +69,7 @@ public class Location implements Serializable { public static NBTTagCompound writeToNBT(Location location) { NBTTagCompound locationNBT = new NBTTagCompound(); - locationNBT.setInteger("worldID", location.dimID); + locationNBT.setInteger("worldID", location.dim); locationNBT.setInteger("x", location.pos.getX()); locationNBT.setInteger("y", location.pos.getY()); locationNBT.setInteger("z", location.pos.getZ()); @@ -88,16 +91,11 @@ public class Location implements Serializable { return false; } Location other = (Location) obj; - return other.dimID == dimID && other.pos.equals(pos); + return other.dim == dim && other.pos.equals(pos); } @Override public int hashCode() { - return pos.hashCode() * 31 + dimID; // TODO - } - - public void loadfrom(Location location) { - dimID = location.dimID; - pos = location.pos; + return pos.hashCode() * 31 + dim; // TODO } } diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/MCPReflection.java b/src/main/java/ddutils/MCPReflection.java similarity index 97% rename from src/main/java/com/zixiken/dimdoors/shared/util/MCPReflection.java rename to src/main/java/ddutils/MCPReflection.java index efe97f8d..8557a87f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/MCPReflection.java +++ b/src/main/java/ddutils/MCPReflection.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/StringUtils.java b/src/main/java/ddutils/StringUtils.java similarity index 97% rename from src/main/java/com/zixiken/dimdoors/shared/util/StringUtils.java rename to src/main/java/ddutils/StringUtils.java index 8f1ed87b..c9c4be5e 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/StringUtils.java +++ b/src/main/java/ddutils/StringUtils.java @@ -1,10 +1,9 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils; import java.util.ArrayList; import java.util.List; /** - * * @author Robijnvogel */ public class StringUtils { diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java b/src/main/java/ddutils/TeleportUtils.java similarity index 97% rename from src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java rename to src/main/java/ddutils/TeleportUtils.java index f7c372c8..e404a873 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java +++ b/src/main/java/ddutils/TeleportUtils.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; @@ -24,7 +24,7 @@ public class TeleportUtils { } public static Entity teleport(Entity entity, Location location, float yaw, float pitch) { - return teleport(entity, location.getDimID(), location.getPos().getX() + .5, location.getPos().getY(), location.getPos().getZ() + .5, yaw, pitch); + return teleport(entity, location.getDim(), location.getPos().getX() + .5, location.getPos().getY(), location.getPos().getZ() + .5, yaw, pitch); } public static Entity teleport(Entity entity, BlockPos pos, float yaw, float pitch) { diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/WorldUtils.java b/src/main/java/ddutils/WorldUtils.java similarity index 61% rename from src/main/java/com/zixiken/dimdoors/shared/util/WorldUtils.java rename to src/main/java/ddutils/WorldUtils.java index 5f8c6348..58e5e7c4 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/WorldUtils.java +++ b/src/main/java/ddutils/WorldUtils.java @@ -1,11 +1,11 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils; -import com.zixiken.dimdoors.DimDoors; import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; public class WorldUtils { public static World getWorld(int dim) { - return DimDoors.proxy.getWorldServer(dim); + return DimensionManager.getWorld(dim); } public static int getDim(World world) { diff --git a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockSpecialAir.java b/src/main/java/ddutils/blocks/BlockSpecialAir.java similarity index 97% rename from src/main/java/com/zixiken/dimdoors/shared/blocks/BlockSpecialAir.java rename to src/main/java/ddutils/blocks/BlockSpecialAir.java index 459c3df9..e1f6d177 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/blocks/BlockSpecialAir.java +++ b/src/main/java/ddutils/blocks/BlockSpecialAir.java @@ -1,7 +1,6 @@ -package com.zixiken.dimdoors.shared.blocks; +package ddutils.blocks; import net.minecraft.block.Block; -import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; diff --git a/src/main/java/com/zixiken/dimdoors/shared/pockets/GridUtils.java b/src/main/java/ddutils/math/GridUtils.java similarity index 96% rename from src/main/java/com/zixiken/dimdoors/shared/pockets/GridUtils.java rename to src/main/java/ddutils/math/GridUtils.java index bcac8bd3..6cddd567 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/pockets/GridUtils.java +++ b/src/main/java/ddutils/math/GridUtils.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.pockets; +package ddutils.math; import lombok.Value; diff --git a/src/main/java/ddutils/math/MathUtils.java b/src/main/java/ddutils/math/MathUtils.java new file mode 100644 index 00000000..42f70b7f --- /dev/null +++ b/src/main/java/ddutils/math/MathUtils.java @@ -0,0 +1,30 @@ +package ddutils.math; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class MathUtils { + + public static T weightedRandom(Map weights) { + if (weights.size() == 0) return null; + int totalWeight = 0; + for (float weight : weights.values()) { + totalWeight += weight; + } + Random random = new Random(); + float f = random.nextFloat() * totalWeight; + for (Map.Entry e : weights.entrySet()) { + f -= e.getValue(); + if (f < 0) return e.getKey(); + } + return null; + } + + public static List listFrom(T element) { + List list = new ArrayList<>(); + list.add(element); + return list; + } +} diff --git a/src/main/java/ddutils/math/RandomUtils.java b/src/main/java/ddutils/math/RandomUtils.java new file mode 100644 index 00000000..34d2a979 --- /dev/null +++ b/src/main/java/ddutils/math/RandomUtils.java @@ -0,0 +1,106 @@ +package ddutils.math; + +import java.util.Random; + +/** + * @author Robijnvogel + */ +public class RandomUtils { // These utils aren't being used by DimDoors! + + /** + * Compares the integers in two arrays and returns true if any integer in + * the first set is within range 0 to {@code difference} - 1 of any integer + * in the second array. + * + * @param set1 the first integer array to compare + * @param difference see method description + * @param set2 the second integer array to compare + * @return {@code (\exists i, j; ; abs(set1[i] - set2[j]) < difference } + * @throws IllegalArgumentException if precondition is violated + * @pre difference >= 0 + */ + public static boolean withinDistanceOf(int[] set1, int difference, int[] set2) throws IllegalArgumentException { + if (difference < 0) throw new IllegalArgumentException("Difference must be larger than 0"); + for (int e1 : set1) { + for (int e2 : set2) { + if (Math.max(e1, e2) - Math.min(e1, e2) < difference) return true; + } + } + return false; + } + + /** + * Returns the sum of the values of all integer elements in an integer array + * + * @param intArray the integers to calculate the sum of + * @param flag this flag is meant to check if all elements in the array must + * be positive (0), negative(1), or it doesn't matter (anything else) + * @return {@code sum(i = 0; intArray.has(i); intArray[i]) } + * @throws IllegalArgumentException if precondition is violated + * @pre {@code (flag != 0 && flag != 1) || (flag == 0 && (\forall i; intArray.has(i); i >= 0)) || (flag == 1 && (\forall i; intArray.has(i); i <= 0))} + */ + public static int arraySum(int[] intArray, short flag) { + int r = 0; + for (int i : intArray) { //check flag + if (flag == 0 && i < 0) { + throw new IllegalArgumentException("all integers in array must be positive"); + } else if (flag == 1 && i > 0) { + throw new IllegalArgumentException("all integers in array must be negative"); + } + r += i; + } + return r; + } + + /** + * Returns either true or false, based on a weighted random, taking in + * account the parameters as the weights for true and false as outcomes. For + * instance: (2, 3) should return true in 40% of the cases and false in 60% + * of the cases. + * + * @param trueWeight the chance weight that this method will return true + * @param falseWeight the chance weight that this method will return false + * @return true or false + * @throws IllegalArgumentException if precondition is violated + * @pre {@code trueWeight > 0 && falseWeight > 0} + */ + public static boolean weightedBoolean(int trueWeight, int falseWeight) { + if (trueWeight <= 0 || falseWeight <= 0) { + throw new IllegalArgumentException("Either of both weights were 0 or lower. Both should be at least 1."); + } + Random random = new Random(); + return random.nextInt(trueWeight + falseWeight) < trueWeight; + } + + /** + * This method returns the sum of {@code base} and a random element of + * {@code transformations} the weight of each of the entries in + * + * @param base the base value to transform from + * @param transformations the possible transformations + * @param weights the chance-weight of those transformations + * @return the sum of {@code base} and the value of an element in + * {@code transformations} + * @throws IllegalArgumentException if precondition is violated + * @pre {@code transformations.length = weights.length} && {@code (\forall i; intArray.has(i); i >= 0)} + * && {@code MathUtils.arraySum(weights, 1) > 0} + */ + public static int transformRandomly(int base, int[] transformations, int[] weights) { + if (transformations.length != weights.length) { + throw new IllegalArgumentException("pre was violated, transformations.length != weights.length"); + } + Random random = new Random(); + int weightSum = arraySum(weights, (short) 0); + if (weightSum <= 0) { + throw new IllegalArgumentException("pre was violated, RandomUtils.arraySum(weights, 1) <= 0"); + } + int choice = random.nextInt(weightSum); + for (int i = 0; i < weights.length; i++) { + choice -= weights[i]; + if (choice < 0) { + return base + transformations[i]; + } + } + throw new IllegalStateException(""); + } +} diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/INBTStorable.java b/src/main/java/ddutils/nbt/INBTStorable.java similarity index 81% rename from src/main/java/com/zixiken/dimdoors/shared/util/INBTStorable.java rename to src/main/java/ddutils/nbt/INBTStorable.java index f4149e3a..b4f801d8 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/INBTStorable.java +++ b/src/main/java/ddutils/nbt/INBTStorable.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils.nbt; import net.minecraft.nbt.NBTTagCompound; diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/NBTUtils.java b/src/main/java/ddutils/nbt/NBTUtils.java similarity index 96% rename from src/main/java/com/zixiken/dimdoors/shared/util/NBTUtils.java rename to src/main/java/ddutils/nbt/NBTUtils.java index 5429d4c2..5b5285ad 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/NBTUtils.java +++ b/src/main/java/ddutils/nbt/NBTUtils.java @@ -1,10 +1,11 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils.nbt; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.Vec3i; import java.util.HashMap; import java.util.Map; + public class NBTUtils { public static Map readMapStringInteger(NBTTagCompound nbt) { HashMap map = new HashMap<>(); diff --git a/src/main/java/com/zixiken/dimdoors/client/CloudRenderBlank.java b/src/main/java/ddutils/render/CloudRenderBlank.java similarity index 91% rename from src/main/java/com/zixiken/dimdoors/client/CloudRenderBlank.java rename to src/main/java/ddutils/render/CloudRenderBlank.java index 2baf32bf..aeebf257 100644 --- a/src/main/java/com/zixiken/dimdoors/client/CloudRenderBlank.java +++ b/src/main/java/ddutils/render/CloudRenderBlank.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.client; +package ddutils.render; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.WorldClient; diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/RGBA.java b/src/main/java/ddutils/render/RGBA.java similarity index 73% rename from src/main/java/com/zixiken/dimdoors/shared/util/RGBA.java rename to src/main/java/ddutils/render/RGBA.java index 3e183901..6f97306f 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/RGBA.java +++ b/src/main/java/ddutils/render/RGBA.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils.render; import lombok.Value; diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/Schematic.java b/src/main/java/ddutils/schem/Schematic.java similarity index 92% rename from src/main/java/com/zixiken/dimdoors/shared/util/Schematic.java rename to src/main/java/ddutils/schem/Schematic.java index 89f50398..1532679d 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/Schematic.java +++ b/src/main/java/ddutils/schem/Schematic.java @@ -1,4 +1,4 @@ -package com.zixiken.dimdoors.shared.util; +package ddutils.schem; import java.util.ArrayList; import java.util.HashMap; @@ -6,7 +6,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import lombok.Getter; import net.minecraft.block.Block; import net.minecraft.block.properties.IProperty; import net.minecraft.block.state.BlockStateContainer; @@ -21,24 +20,23 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.ForgeRegistries; /** - * * @author Robijnvogel */ public class Schematic { - @Getter int version = 1; - @Getter String author = null; - @Getter String schematicName = "Unknown"; - @Getter long creationDate; - @Getter String[] requiredMods = {}; - @Getter short width; - @Getter short height; - @Getter short length; - @Getter int[] offset = {0, 0, 0}; - @Getter int paletteMax; - @Getter List pallette = new ArrayList<>(); - @Getter int[][][] blockData; //[x][y][z] - @Getter List tileEntities = new ArrayList<>(); + public int version = 1; + public String author = null; + public String schematicName = "Unknown"; + public long creationDate; + public String[] requiredMods = {}; + public short width; + public short height; + public short length; + public int[] offset = {0, 0, 0}; + public int paletteMax; + public List pallette = new ArrayList<>(); + public int[][][] blockData; //[x][y][z] + public List tileEntities = new ArrayList<>(); public static Schematic loadFromNBT(NBTTagCompound nbt, String name) { Schematic schematic = new Schematic(); @@ -65,7 +63,6 @@ public class Schematic { } } - //@todo, check if the required mods are loaded, otherwise abort schematic.width = nbt.getShort("Width"); //Width is required schematic.height = nbt.getShort("Height"); //Height is required schematic.length = nbt.getShort("Length"); //Length is required @@ -232,8 +229,8 @@ public class Schematic { public static void place(Schematic schematic, World world, int xBase, int yBase, int zBase) { // Place the schematic's blocks - List palette = schematic.getPallette(); - int[][][] blockData = schematic.getBlockData(); + List palette = schematic.pallette; + int[][][] blockData = schematic.blockData; for (int x = 0; x < blockData.length; x++) { for (int y = 0; y < blockData[x].length; y++) { for (int z = 0; z < blockData[x][y].length; z++) { @@ -243,15 +240,17 @@ public class Schematic { } // Set TileEntity data - for (NBTTagCompound tileEntityNBT : schematic.getTileEntities()) { + for (NBTTagCompound tileEntityNBT : schematic.tileEntities) { BlockPos pos = new BlockPos( xBase + tileEntityNBT.getInteger("x"), yBase + tileEntityNBT.getInteger("y"), zBase + tileEntityNBT.getInteger("z")); TileEntity tileEntity = world.getTileEntity(pos); if (tileEntity != null) { - tileEntity.readFromNBT(tileEntityNBT); //this reads in the wrong blockPos - tileEntity.setWorld(world); // TODO: necessary? + tileEntity.readFromNBT(tileEntityNBT); + + // Correct the position + tileEntity.setWorld(world); tileEntity.setPos(pos); //correct the position tileEntity.markDirty(); }