Three fixes
- Fix ClosingRiftFX - Fix pocket command - Fix teleportation
This commit is contained in:
parent
02f22ddf76
commit
70b35a2f5e
3 changed files with 19 additions and 42 deletions
|
@ -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.
|
||||
*/
|
||||
|
|
|
@ -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.");
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue