diff --git a/src/main/java/carpet/helpers/XPcombine.java b/src/main/java/carpet/helpers/XPcombine.java index 8dac2226..2687e8a5 100644 --- a/src/main/java/carpet/helpers/XPcombine.java +++ b/src/main/java/carpet/helpers/XPcombine.java @@ -13,7 +13,7 @@ import net.minecraft.util.registry.Registry; public class XPcombine { - public static void searchForOtherXPNearbyCarpet(ExperienceOrbEntity first) + public static void searchForOtherXPNearby(ExperienceOrbEntity first) { for (ExperienceOrbEntity entityxp : first.world.getEntities(ExperienceOrbEntity.class, first.getBoundingBox().expand(0.5D, 0.0D, 0.5D))) { diff --git a/src/main/java/carpet/logging/logHelpers/TNTLogHelper.java b/src/main/java/carpet/logging/logHelpers/TNTLogHelper.java index acbf8b00..d97b8cb3 100644 --- a/src/main/java/carpet/logging/logHelpers/TNTLogHelper.java +++ b/src/main/java/carpet/logging/logHelpers/TNTLogHelper.java @@ -3,19 +3,21 @@ package carpet.logging.logHelpers; import carpet.logging.LoggerRegistry; import carpet.utils.Messenger; import net.minecraft.network.chat.BaseComponent; +import net.minecraft.util.math.Vec3d; public class TNTLogHelper { - private double primedX, primedY, primedZ, primedAngle; + private double primedX, primedY, primedZ; + Vec3d primedAngle; /** * Runs when the TNT is primed. Expects the position and motion angle of the TNT. */ - public void onPrimed(double x, double y, double z, float angle) + public void onPrimed(double x, double y, double z, Vec3d motion) { primedX = x; primedY = y; primedZ = z; - primedAngle = angle; + primedAngle = motion; } /** * Runs when the TNT explodes. Expects the position of the TNT. @@ -27,15 +29,16 @@ public class TNTLogHelper { case "brief": return new BaseComponent[]{Messenger.c( - "l P ",Messenger.dblt("l",primedX,primedY,primedZ,primedAngle), + "l P ",Messenger.dblt("l",primedX,primedY,primedZ), + "w ",Messenger.dblt("l", primedAngle.x, primedAngle.y, primedAngle.z), "r E ",Messenger.dblt("r",x, y, z))}; case "full": return new BaseComponent[]{Messenger.c( - "l P ",Messenger.dblf("l",primedX,primedY,primedZ,primedAngle), + "l P ",Messenger.dblf("l",primedX,primedY,primedZ), + "w ",Messenger.dblf("l", primedAngle.x, primedAngle.y, primedAngle.z), "r E ",Messenger.dblf("r",x, y, z))}; } return null; }); } - } diff --git a/src/main/java/carpet/logging/logHelpers/TrajectoryLogHelper.java b/src/main/java/carpet/logging/logHelpers/TrajectoryLogHelper.java index 24726e27..a2b44a78 100644 --- a/src/main/java/carpet/logging/logHelpers/TrajectoryLogHelper.java +++ b/src/main/java/carpet/logging/logHelpers/TrajectoryLogHelper.java @@ -28,11 +28,11 @@ public class TrajectoryLogHelper this.doLog = this.logger.hasOnlineSubscribers(); } - public void onTick(double x, double y, double z, double motionX, double motionY, double motionZ) + public void onTick(double x, double y, double z, Vec3d velocity) { if (!doLog) return; positions.add(new Vec3d(x, y, z)); - motions.add(new Vec3d(motionX, motionY, motionZ)); + motions.add(velocity); } public void onFinish() diff --git a/src/main/java/carpet/mixins/ExperienceOrbEntityMixin.java b/src/main/java/carpet/mixins/ExperienceOrbEntityMixin.java index 6f20fa66..e0a201ae 100644 --- a/src/main/java/carpet/mixins/ExperienceOrbEntityMixin.java +++ b/src/main/java/carpet/mixins/ExperienceOrbEntityMixin.java @@ -4,6 +4,7 @@ import carpet.CarpetSettings; import carpet.fakes.ExperienceOrbInterface; import carpet.helpers.XPcombine; import net.minecraft.entity.ExperienceOrbEntity; +import net.minecraft.entity.player.PlayerEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -39,9 +40,16 @@ public abstract class ExperienceOrbEntityMixin implements ExperienceOrbInterface if (getCombineDelay() == 0) { - XPcombine.searchForOtherXPNearbyCarpet((ExperienceOrbEntity) (Object) this); + XPcombine.searchForOtherXPNearby((ExperienceOrbEntity) (Object) this); } } } + @Inject(method = "onPlayerCollision", at = @At("HEAD")) + void removeDelay(PlayerEntity playerEntity_1, CallbackInfo ci) + { + if (CarpetSettings.getBool("xpNoCooldown")) + playerEntity_1.experiencePickUpDelay = 0; + } + } diff --git a/src/main/java/carpet/mixins/FallingBlockEntityMixin.java b/src/main/java/carpet/mixins/FallingBlockEntityMixin.java new file mode 100644 index 00000000..223056ff --- /dev/null +++ b/src/main/java/carpet/mixins/FallingBlockEntityMixin.java @@ -0,0 +1,42 @@ +package carpet.mixins; + +import carpet.logging.LoggerRegistry; +import carpet.logging.logHelpers.TrajectoryLogHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.FallingBlockEntity; +import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(FallingBlockEntity.class) +public abstract class FallingBlockEntityMixin extends Entity +{ + private TrajectoryLogHelper logHelper; + public FallingBlockEntityMixin(EntityType entityType_1, World world_1) { super(entityType_1, world_1); } + + @Inject(method = "(Lnet/minecraft/entity/EntityType;Lnet/minecraft/world/World;)V", at = @At("RETURN")) + private void addLogger(EntityType entityType_1, World world_1, CallbackInfo ci) + { + if (LoggerRegistry.__fallingBlocks && !world_1.isClient) + logHelper = new TrajectoryLogHelper("fallingBlocks"); + } + + @Inject(method = "tick", at = @At("HEAD")) + private void tickCheck(CallbackInfo ci) + { + if (LoggerRegistry.__fallingBlocks && logHelper != null) + logHelper.onTick(x, y, z, getVelocity()); + } + + @Override + public void remove() + { + super.remove(); + if (LoggerRegistry.__fallingBlocks && logHelper != null) + logHelper.onFinish(); + } +} diff --git a/src/main/java/carpet/mixins/PrimedTntEntityMixin.java b/src/main/java/carpet/mixins/PrimedTntEntityMixin.java index f91fd956..196588ed 100644 --- a/src/main/java/carpet/mixins/PrimedTntEntityMixin.java +++ b/src/main/java/carpet/mixins/PrimedTntEntityMixin.java @@ -1,9 +1,11 @@ package carpet.mixins; +import carpet.CarpetSettings; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.PrimedTntEntity; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -27,11 +29,13 @@ public abstract class PrimedTntEntityMixin extends Entity private void initTNTLogger(World world_1, double double_1, double double_2, double double_3, LivingEntity livingEntity_1, CallbackInfo ci) { - double double_4 = world_1.random.nextDouble() * 6.2831854820251465D; + if(CarpetSettings.getBool("tntPrimerMomentumRemoved")) + this.setVelocity(new Vec3d(0.0, 0.20000000298023224D, 0.0)); if (LoggerRegistry.__tnt) { logHelper = new TNTLogHelper(); - logHelper.onPrimed(double_1, double_2, double_3, (float)double_4); + + logHelper.onPrimed(double_1, double_2, double_3, getVelocity()); } } diff --git a/src/main/java/carpet/mixins/ProjectileEntityMixin.java b/src/main/java/carpet/mixins/ProjectileEntityMixin.java new file mode 100644 index 00000000..5822da46 --- /dev/null +++ b/src/main/java/carpet/mixins/ProjectileEntityMixin.java @@ -0,0 +1,46 @@ +package carpet.mixins; + +import carpet.logging.LoggerRegistry; +import carpet.logging.logHelpers.TrajectoryLogHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.util.hit.HitResult; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ProjectileEntity.class) +public abstract class ProjectileEntityMixin extends Entity +{ + private TrajectoryLogHelper logHelper; + public ProjectileEntityMixin(EntityType entityType_1, World world_1) { super(entityType_1, world_1); } + + @Inject(method = "(Lnet/minecraft/entity/EntityType;Lnet/minecraft/world/World;)V", at = @At("RETURN")) + private void addLogger(EntityType entityType_1, World world_1, CallbackInfo ci) + { + if (LoggerRegistry.__projectiles && !world_1.isClient) + logHelper = new TrajectoryLogHelper("projectiles"); + } + + @Inject(method = "tick", at = @At("RETURN")) + private void tickCheck(CallbackInfo ci) + { + if (LoggerRegistry.__projectiles && logHelper != null) + logHelper.onTick(x, y, z, getVelocity()); + } + + @Inject(method = "onHit(Lnet/minecraft/util/hit/HitResult;)V", at = @At("RETURN")) + private void remove(HitResult hitResult_1, CallbackInfo ci) + { + if (LoggerRegistry.__projectiles && + (hitResult_1.getType() == HitResult.Type.ENTITY || hitResult_1.getType() == HitResult.Type.BLOCK) + && logHelper != null) + { + logHelper.onFinish(); + logHelper = null; + } + } +} diff --git a/src/main/java/carpet/mixins/ThrownEntityMixin.java b/src/main/java/carpet/mixins/ThrownEntityMixin.java new file mode 100644 index 00000000..6771fe44 --- /dev/null +++ b/src/main/java/carpet/mixins/ThrownEntityMixin.java @@ -0,0 +1,42 @@ +package carpet.mixins; + +import carpet.logging.LoggerRegistry; +import carpet.logging.logHelpers.TrajectoryLogHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.projectile.ProjectileEntity; +import net.minecraft.entity.thrown.ThrownEntity; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ThrownEntity.class) +public abstract class ThrownEntityMixin extends Entity +{ + private TrajectoryLogHelper logHelper; + public ThrownEntityMixin(EntityType entityType_1, World world_1) { super(entityType_1, world_1); } + + @Inject(method = "(Lnet/minecraft/entity/EntityType;Lnet/minecraft/world/World;)V", at = @At("RETURN")) + private void addLogger(EntityType entityType_1, World world_1, CallbackInfo ci) + { + if (LoggerRegistry.__projectiles && !world_1.isClient) + logHelper = new TrajectoryLogHelper("projectiles"); + } + + @Inject(method = "tick", at = @At("HEAD")) + private void tickCheck(CallbackInfo ci) + { + if (LoggerRegistry.__projectiles && logHelper != null) + logHelper.onTick(x, y, z, getVelocity()); + } + + @Override + public void remove() + { + super.remove(); + if (LoggerRegistry.__projectiles && logHelper != null) + logHelper.onFinish(); + } +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index c9262b34..610dcc7b 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -41,7 +41,10 @@ "TntBlockMixin", "ExplosionMixin", - "PrimedTNTEntityMixin", + "PrimedTntEntityMixin", + "ProjectileEntityMixin", + "FallingBlockEntityMixin", + "ThrownEntityMixin", "FloatingIslandsChunkGeneratorMixin", "EndCityFeatureMixin",