Skip to content

Commit e86dab1

Browse files
committed
feat: forceLoadPets
1 parent a38eb72 commit e86dab1

6 files changed

Lines changed: 61 additions & 3 deletions

File tree

src/main/java/io/github/optijava/opt_carpet_addition/OptCarpetAddition.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.github.optijava.opt_carpet_addition.commands.*;
1010
import io.github.optijava.opt_carpet_addition.events.fixExperienceBug.FixExperienceBug;
1111
import io.github.optijava.opt_carpet_addition.logger.LoggerRegister;
12+
import io.github.optijava.opt_carpet_addition.mixins.rule.forceLoadPets.FollowOwnerGoal_Mixin;
1213
import io.github.optijava.opt_carpet_addition.utils.CommandLogger;
1314
import io.github.optijava.opt_carpet_addition.utils.ConfigUtil;
1415
import io.github.optijava.opt_carpet_addition.utils.TpLimit;
@@ -98,6 +99,10 @@ public void onGameStarted() {
9899
rateLimiter.setRate(time);
99100
}
100101
}
102+
103+
if (rule.name().equals("forceLoadPets") && OptCarpetSettings.forceLoadPets) {
104+
FollowOwnerGoal_Mixin.ShouldTriggerImmediateLoadPets.triggerImmediateLoadPets = true;
105+
}
101106
}));
102107

103108
// config

src/main/java/io/github/optijava/opt_carpet_addition/OptCarpetSettings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,9 @@ public class OptCarpetSettings {
196196
categories = {RuleCategory.FEATURE, OCA}
197197
)
198198
public static boolean allowSpectatorToModifyContainer = false;
199+
200+
@Rule(
201+
categories = {RuleCategory.FEATURE, RuleCategory.EXPERIMENTAL, OCA}
202+
)
203+
public static boolean forceLoadPets = false;
199204
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.github.optijava.opt_carpet_addition.mixins.rule.forceLoadPets;
2+
3+
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
4+
import io.github.optijava.opt_carpet_addition.utils.McUtils;
5+
import net.minecraft.server.level.ServerLevel;
6+
import net.minecraft.server.level.TicketType;
7+
import net.minecraft.world.entity.TamableAnimal;
8+
import net.minecraft.world.entity.ai.goal.FollowOwnerGoal;
9+
import org.spongepowered.asm.mixin.Final;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.Inject;
14+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
16+
@Mixin(FollowOwnerGoal.class)
17+
public class FollowOwnerGoal_Mixin {
18+
19+
@Final
20+
@Shadow
21+
private TamableAnimal tamable;
22+
23+
@Inject(
24+
method = "tick",
25+
at = @At("TAIL")
26+
)
27+
public void tick(CallbackInfo ci) {
28+
if (OptCarpetSettings.forceLoadPets && this.tamable.level() instanceof ServerLevel serverLevel) {
29+
if (ShouldTriggerImmediateLoadPets.triggerImmediateLoadPets || (McUtils.MINECRAFT_SERVER.getTickCount() % 35 == 0)) {
30+
serverLevel.getChunkSource().addTicketWithRadius(TicketType.ENDER_PEARL, this.tamable.chunkPosition(), 2);
31+
}
32+
ShouldTriggerImmediateLoadPets.triggerImmediateLoadPets = false;
33+
}
34+
}
35+
36+
public static class ShouldTriggerImmediateLoadPets {
37+
public static boolean triggerImmediateLoadPets = false;
38+
}
39+
}

src/main/resources/assets/opt-carpet-addition/lang/en_us.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,9 @@
6262
"carpet.rule.enableListAdvanceCommand.name": "Enable Advanced List Command",
6363
"carpet.rule.enableListAdvanceCommand.desc": "Enable advanced list feature commands",
6464
"carpet.rule.enableTpmanagerCommand.name": "Enable Teleport Manager Command",
65-
"carpet.rule.enableTpmanagerCommand.desc": "Enable teleport management related commands"
65+
"carpet.rule.enableTpmanagerCommand.desc": "Enable teleport management related commands",
66+
"carpet.rule.allowSpectatorToModifyContainer.name": "Allow spectators to modify containers",
67+
"carpet.rule.allowSpectatorToModifyContainer.desc": "Allow spectators to modify containers",
68+
"carpet.rule.forceLoadPets.name": "Force load pet chunks",
69+
"carpet.rule.forceLoadPets.desc": "Create a ticket every 35 ticks in pet chunks to prevent pets from not teleporting to the player."
6670
}

src/main/resources/assets/opt-carpet-addition/lang/zh_cn.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@
6262
"carpet.rule.enableListAdvanceCommand.name": "启用高级列表命令",
6363
"carpet.rule.enableListAdvanceCommand.desc": "启用高级列表功能命令",
6464
"carpet.rule.enableTpmanagerCommand.name": "启用传送管理命令",
65-
"carpet.rule.enableTpmanagerCommand.desc": "启用传送管理相关命令"
65+
"carpet.rule.enableTpmanagerCommand.desc": "启用传送管理相关命令",
66+
"carpet.rule.allowSpectatorToModifyContainer.name": "允许旁观者操作容器",
67+
"carpet.rule.allowSpectatorToModifyContainer.desc": "允许旁观者在GUI操作容器",
68+
"carpet.rule.forceLoadPets.name": "强制加载宠物所在的区块",
69+
"carpet.rule.forceLoadPets.desc": "向宠物所在区块每隔35tick投1个类型为ENDER_PEARL的加载票,强加载宠物区块防止宠物不传送到玩家"
6670
}
6771

src/main/resources/opt-carpet-addition.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
//"rule.optimizeFakePlayerSpawn.EntityPlayerMPFake_Mixin",
2323
//"rule.optimizeFakePlayerSpawn.PlayerCommand_Mixin",
2424
//? }
25-
"logger.blockUpdate.LogCommand_Mixin"
25+
"logger.blockUpdate.LogCommand_Mixin",
26+
"rule.forceLoadPets.FollowOwnerGoal_Mixin"
2627
],
2728
"client": [
2829
"rule.unescapeChatMessage.ChatMessageC2SPacket_Mixin",

0 commit comments

Comments
 (0)