Skip to content

Commit

Permalink
Merge pull request #12 from BSR-Server/feature/instantTileTick
Browse files Browse the repository at this point in the history
add rule - instantTileTick
  • Loading branch information
HeyBlack233 authored Aug 30, 2024
2 parents 6879a27 + b6dd9b0 commit 9ebcfe7
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ public Integer validate(ServerCommandSource source, ParsedRule<Integer> currentR

@Rule(
desc = "",
category = {CREATIVE, "flexiblepcb"}
category = {CREATIVE, EXPERIMENTAL, "flexiblepcb"}
)
public static boolean instantTileTick = false;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package heyblack.flexiblepcb.mixin.rule.instantTIleTIck;

import net.minecraft.server.world.ServerTickScheduler;
import net.minecraft.server.world.ServerWorld;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;

@Mixin(ServerTickScheduler.class)
public interface ServerTickSchedulerAccessor {
@Accessor
ServerWorld getWorld();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package heyblack.flexiblepcb.mixin.rule.instantTIleTIck;

import heyblack.flexiblepcb.FlexiblePCBSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerTickScheduler;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ScheduledTick;
import net.minecraft.world.TickPriority;
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(ServerTickScheduler.class)
public class ServerTickSchedulerMixin<T> {
@Inject(
method = "schedule",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/world/ServerTickScheduler;addScheduledTick(Lnet/minecraft/world/ScheduledTick;)V"
),
cancellable = true
)
public void iTT(BlockPos pos, T object, int delay, TickPriority priority, CallbackInfo ci) {
if (FlexiblePCBSettings.instantTileTick) {
ServerWorld world = ((ServerTickSchedulerAccessor) (ServerTickScheduler) (Object) this).getWorld();
if (!world.isClient()) {
ScheduledTick<Block> tick = new ScheduledTick<Block>(pos, (Block) object, (long)delay + world.getTime(), priority);
BlockState state = world.getBlockState(pos);
if (state.isOf(tick.getObject())) {
state.scheduledTick(world, tick.pos, world.random);
}

ci.cancel();
}
}
}
}
2 changes: 2 additions & 0 deletions src/main/resources/flexiblepcb.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
"rule.fixUnstableOnGroundTag.BedBlockMixin",
"rule.fixUnstableOnGroundTag.SlimeBlockMixin",
"rule.insertBlockToMinecart.MinecartEntityMixin",
"rule.instantTIleTIck.ServerTickSchedulerAccessor",
"rule.instantTIleTIck.ServerTickSchedulerMixin",
"rule.itemPickUpRange.PlayerEntityMixin",
"rule.moreChunkLoaders.HopperBlockEntityMixin",
"rule.moreChunkLoaders.PistonBlockMixin",
Expand Down

0 comments on commit 9ebcfe7

Please sign in to comment.