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.ItemEntityMixin_ActivationRange",
|
||||||
"activationrange.entity.LivingEntityMixin_ActivationRange",
|
"activationrange.entity.LivingEntityMixin_ActivationRange",
|
||||||
"activationrange.entity.VillagerEntityMixin_ActivationRange",
|
"activationrange.entity.VillagerEntityMixin_ActivationRange",
|
||||||
|
"realtime.ItemEntityMixin_Realtime",
|
||||||
|
"realtime.PlayerInteractionManagerMixin_Realtime",
|
||||||
"trackingrange.ChunkManagerMixin_TrackingRange"
|
"trackingrange.ChunkManagerMixin_TrackingRange"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user