Realtime for block break
This commit is contained in:
parent
f2b24ca9f0
commit
6a36da70a8
|
@ -0,0 +1,29 @@
|
|||
package io.izzel.arclight.impl.mixin.optimization.general.realtime;
|
||||
|
||||
import io.izzel.arclight.common.mod.ArclightConstants;
|
||||
import net.minecraft.entity.item.ItemEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ItemEntity.class)
|
||||
public class ItemEntityMixin_Realtime {
|
||||
|
||||
@Shadow public int pickupDelay;
|
||||
@Shadow public int age;
|
||||
|
||||
private int lastTick = ArclightConstants.currentTick - 1;
|
||||
|
||||
@Inject(method = "tick", at = @At(value = "INVOKE", shift = At.Shift.AFTER, target = "Lnet/minecraft/entity/Entity;tick()V"))
|
||||
private void arclight$useWallTime(CallbackInfo ci) {
|
||||
int elapsedTicks = ArclightConstants.currentTick - this.lastTick - 1;
|
||||
if (elapsedTicks < 0) {
|
||||
elapsedTicks = 0;
|
||||
}
|
||||
if (this.pickupDelay > 0 && this.pickupDelay != 32767 && elapsedTicks > 0) this.pickupDelay -= elapsedTicks;
|
||||
if (this.age != -32768) this.age += elapsedTicks;
|
||||
this.lastTick = ArclightConstants.currentTick;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package io.izzel.arclight.impl.mixin.optimization.general.realtime;
|
||||
|
||||
import io.izzel.arclight.common.mod.ArclightConstants;
|
||||
import net.minecraft.server.management.PlayerInteractionManager;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
@Mixin(PlayerInteractionManager.class)
|
||||
public class PlayerInteractionManagerMixin_Realtime {
|
||||
|
||||
@Shadow private int ticks;
|
||||
|
||||
private int lastTick = ArclightConstants.currentTick - 1;
|
||||
|
||||
@Redirect(method = "tick", at = @At(value = "FIELD", opcode = Opcodes.PUTFIELD, target = "Lnet/minecraft/server/management/PlayerInteractionManager;ticks:I"))
|
||||
private void arclight$useWallTime(PlayerInteractionManager playerInteractionManager, int value) {
|
||||
int elapsedTicks = ArclightConstants.currentTick - this.lastTick;
|
||||
if (elapsedTicks < 1) {
|
||||
elapsedTicks = 1;
|
||||
}
|
||||
this.ticks += elapsedTicks;
|
||||
this.lastTick = ArclightConstants.currentTick;
|
||||
}
|
||||
}
|
|
@ -17,6 +17,8 @@
|
|||
"activationrange.entity.ItemEntityMixin_ActivationRange",
|
||||
"activationrange.entity.LivingEntityMixin_ActivationRange",
|
||||
"activationrange.entity.VillagerEntityMixin_ActivationRange",
|
||||
"realtime.ItemEntityMixin_Realtime",
|
||||
"realtime.PlayerInteractionManagerMixin_Realtime",
|
||||
"trackingrange.ChunkManagerMixin_TrackingRange"
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue
Block a user