From 9f3e09498d040249ac542d74fbfcf21c8c7a8cfa Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Fri, 23 Oct 2020 15:06:41 +0100 Subject: [PATCH] Hopefully fixes #469 --- .../wizardry/potion/PotionContainment.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/electroblob/wizardry/potion/PotionContainment.java b/src/main/java/electroblob/wizardry/potion/PotionContainment.java index 53620d11..ef12241f 100644 --- a/src/main/java/electroblob/wizardry/potion/PotionContainment.java +++ b/src/main/java/electroblob/wizardry/potion/PotionContainment.java @@ -6,11 +6,13 @@ import electroblob.wizardry.util.EntityUtils; import electroblob.wizardry.util.GeometryUtils; import electroblob.wizardry.util.NBTExtras; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTUtil; import net.minecraft.network.play.server.SPacketEntityVelocity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Vec3d; import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; import net.minecraftforge.fml.common.Mod; @@ -21,6 +23,8 @@ public class PotionContainment extends PotionMagicEffect { public static final String ENTITY_TAG = "containmentPos"; + private static final double RUBBERBAND_THRESHOLD = 0.24; + public PotionContainment(boolean isBadEffect, int liquidColour){ super(isBadEffect, liquidColour, new ResourceLocation(Wizardry.MODID, "textures/gui/potion_icons/containment.png")); this.setPotionName("potion." + Wizardry.MODID + ":containment"); @@ -54,7 +58,7 @@ public class PotionContainment extends PotionMagicEffect { if(target.getEntityBoundingBox().minX < origin.x - maxDistance) x = origin.x - maxDistance + target.width/2; if(target.getEntityBoundingBox().maxY > origin.y + maxDistance) y = origin.y + maxDistance - target.height; - if(target.posY < origin.y - maxDistance) y = origin.y - maxDistance; + if(target.getEntityBoundingBox().minY < origin.y - maxDistance) y = origin.y - maxDistance; if(target.getEntityBoundingBox().maxZ > origin.z + maxDistance) z = origin.z + maxDistance - target.width/2; if(target.getEntityBoundingBox().minZ < origin.z - maxDistance) z = origin.z - maxDistance + target.width/2; @@ -94,6 +98,13 @@ public class PotionContainment extends PotionMagicEffect { // } // } + // Rubberbanding prevention (the 0.25 limit is from NetHandlerPlayServer, just search "moved wrongly" + if(target instanceof EntityPlayer){ + x = MathHelper.clamp(x, target.posX - RUBBERBAND_THRESHOLD, target.posX + RUBBERBAND_THRESHOLD); + y = MathHelper.clamp(y, target.posY - RUBBERBAND_THRESHOLD, target.posY + RUBBERBAND_THRESHOLD); + z = MathHelper.clamp(z, target.posZ - RUBBERBAND_THRESHOLD, target.posZ + RUBBERBAND_THRESHOLD); + } + EntityUtils.undoGravity(target); target.addVelocity(0.35 * Math.signum(x - target.posX), 0.35 * Math.signum(y - target.posY), 0.35 * Math.signum(z - target.posZ)); target.setPositionAndUpdate(x, y, z); // FIXME: This line must be causing the server rubberbanding, not sure why