Three fixes

- Fix ClosingRiftFX
 - Fix pocket command
 - Fix teleportation
This commit is contained in:
Runemoro 2017-12-19 17:43:40 -05:00
parent 02f22ddf76
commit 70b35a2f5e
3 changed files with 19 additions and 42 deletions

View file

@ -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.
*/

View file

@ -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.");

View file

@ -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);
}