From 70b35a2f5e4e39662fccc2c4a3786e95fefc7256 Mon Sep 17 00:00:00 2001 From: Runemoro Date: Tue, 19 Dec 2017 17:43:40 -0500 Subject: [PATCH] Three fixes - Fix ClosingRiftFX - Fix pocket command - Fix teleportation --- .../dimdoors/client/ClosingRiftFX.java | 32 +------------------ .../shared/commands/PocketCommand.java | 18 ++++++----- .../dimdoors/shared/util/TeleportUtils.java | 11 +++++-- 3 files changed, 19 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/zixiken/dimdoors/client/ClosingRiftFX.java b/src/main/java/com/zixiken/dimdoors/client/ClosingRiftFX.java index fcf9a3ed..6b41eb8c 100644 --- a/src/main/java/com/zixiken/dimdoors/client/ClosingRiftFX.java +++ b/src/main/java/com/zixiken/dimdoors/client/ClosingRiftFX.java @@ -31,40 +31,10 @@ public class ClosingRiftFX extends Particle { public void renderParticle(BufferBuilder buffer, Entity entityIn, float partialTicks, float rotationX, float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) { if (!twinkle || particleAge < particleMaxAge / 3 || (particleAge + particleMaxAge) / 3 % 2 == 0) { - doRenderParticle(buffer, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); + super.renderParticle(buffer, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, rotationXZ); } } - public void doRenderParticle(BufferBuilder worldRenderer, float par2, float par3, float par4, - float par5, float par6, float par7) { - float var8 = super.particleTextureIndexX % 16 / 16.0F; - float var9 = var8 + 0.0624375F; - float var10 = particleTextureIndexX / 16 / 16.0F; - float var11 = var10 + 0.0624375F; - float var12 = 0.1F * particleScale; - float var13 = (float) (prevPosX + (posX - prevPosX) * par2 - interpPosX); - float var14 = (float) (prevPosY + (posY - prevPosY) * par2 - interpPosY); - float var15 = (float) (prevPosZ + (posZ - prevPosZ) * par2 - interpPosZ); - float var16 = 0.8F; - - worldRenderer.pos(var13 - par3 * var12 - par6 * var12, var14 - par4 * var12, var15 - par5 * var12 - par7 * var12) - .tex(var9, var11) - .color(particleRed * var16, particleGreen * var16, particleBlue * var16, (float) .7) - .endVertex(); - worldRenderer.pos(var13 - par3 * var12 + par6 * var12, var14 + par4 * var12, var15 - par5 * var12 + par7 * var12) - .tex(var9, var10) - .color(particleRed * var16, particleGreen * var16, particleBlue * var16, (float) .7) - .endVertex(); - worldRenderer.pos(var13 + par3 * var12 + par6 * var12, var14 + par4 * var12, var15 + par5 * var12 + par7 * var12) - .tex(var8, var10) - .color(particleRed * var16, particleGreen * var16, particleBlue * var16, (float) .7) - .endVertex(); - worldRenderer.pos(var13 + par3 * var12 - par6 * var12, var14 - par4 * var12, var15 + par5 * var12 - par7 * var12) - .tex(var8, var11) - .color(particleRed * var16, particleGreen * var16, particleBlue * var16, (float) .7) - .endVertex(); - } - /** * Called to update the entity's position/logic. */ diff --git a/src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java b/src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java index 4b8b2230..6fee30d6 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java +++ b/src/main/java/com/zixiken/dimdoors/shared/commands/PocketCommand.java @@ -46,9 +46,9 @@ public class PocketCommand extends CommandBase { } @Override - public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { // TODO: option to replace current pocket + public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { // TODO: more pocket commands (replace pocket, get ID, teleport to pocket, etc.) // Check correct number of arguments - if (args.length > 2 || args.length > 3) { + if (args.length < 2 || args.length > 3) { sender.sendMessage(new TextComponentString("[DimDoors] Usage: /" + getUsage(sender))); return; } @@ -79,24 +79,26 @@ public class PocketCommand extends CommandBase { } // Check if the schematic exists - if (!SchematicHandler.INSTANCE.getTemplateGroups().contains(name)) { + if (!SchematicHandler.INSTANCE.getTemplateGroups().contains(group)) { DimDoors.chat(player, "Group " + group + " not found"); return; - } else if (!SchematicHandler.INSTANCE.getTemplateNames(name).contains(group)) { + } else if (!SchematicHandler.INSTANCE.getTemplateNames(group).contains(name)) { DimDoors.chat(player, "Schematic " + name + " not found in group " + group); return; } - // Generate the schematic and teleport the player to it - DimDoors.chat(player, "Generating schematic " + args[1]); - PocketTemplate template = SchematicHandler.INSTANCE.getTemplate(args[0], args[1]); + // Generate the schematic + DimDoors.chat(player, "Generating schematic " + name); + PocketTemplate template = SchematicHandler.INSTANCE.getTemplate(group, name); Pocket pocket = PocketGenerator.generatePocketFromTemplate(WorldUtils.getDim(player.world), template, new VirtualLocation(0, 0, 0, 0,0)); if (setup) pocket.setup(); + + // Teleport the player there if (pocket.getEntrance() != null) { TileEntityRift entrance = (TileEntityRift) player.world.getTileEntity(pocket.getEntrance().getPos()); entrance.teleportTo(player); } else { - TeleportUtils.teleport(player, new Location(player.world, pocket.getX(), 0, pocket.getZ()), 0, 0); + TeleportUtils.teleport(player, new Location(player.world, pocket.getX(), 20, pocket.getZ()), 0, 0); } } else { DimDoors.log.info("Not executing command /" + getName() + " because it wasn't sent by a player."); diff --git a/src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java b/src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java index b1eb1daf..17ec49bd 100644 --- a/src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java +++ b/src/main/java/com/zixiken/dimdoors/shared/util/TeleportUtils.java @@ -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(), location.getPos().getY(), location.getPos().getZ(), yaw, pitch); + return teleport(entity, location.getDimID(), 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) { @@ -76,9 +76,14 @@ public class TeleportUtils { if (entity instanceof EntityPlayerMP) { EntityPlayerMP player = (EntityPlayerMP) entity; try { - Field invulnerableDimensionChange = EntityPlayerMP.class.getDeclaredField("invulnerableDimensionChange"); // Prevents cancelling the position change in survival. + Field invulnerableDimensionChange; + try { + invulnerableDimensionChange = EntityPlayerMP.class.getDeclaredField("field_184851_cj"); // If this breaks, check that Minecraft didn't rename the field + } catch (NoSuchFieldException e) { // Running on deobfuscated Minecraft + invulnerableDimensionChange = EntityPlayerMP.class.getDeclaredField("invulnerableDimensionChange"); + } invulnerableDimensionChange.setAccessible(true); - invulnerableDimensionChange.setBoolean(player, true); // without this, there's a chance that the new player position gets cancelled + invulnerableDimensionChange.setBoolean(player, true); // Prevent Minecraft from cancelling the position change being too big if the player is not in creative } catch (NoSuchFieldException|IllegalAccessException e) { throw new RuntimeException(e); }