feat: 村民生成堆栈显示
This commit is contained in:
1 parent
a3e3fb361f
commit
43a6b49e9e
6 files changed
+47
-3
No files matched your search
@@ -53,4 +53,7 @@ public class SLSCarpetSettings {
|
||||
|
||||
@Rule(categories = {CARPET_ID, RuleCategory.OPTIMIZATION})
|
||||
public static boolean optimizedOnDragonRespawn = false;
|
||||
|
||||
@Rule(categories = {CARPET_ID, RuleCategory.FEATURE})
|
||||
public static boolean printStackTraceOnVillagerSpawn = false;
|
||||
}
|
||||
+39
@@ -1,17 +1,24 @@
|
||||
package com.github.zly2006.carpetslsaddition.mixin.entity;
|
||||
|
||||
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
|
||||
import com.github.zly2006.carpetslsaddition.ServerMain;
|
||||
import net.minecraft.entity.EntityData;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.SpawnReason;
|
||||
import net.minecraft.entity.passive.MerchantEntity;
|
||||
import net.minecraft.entity.passive.VillagerEntity;
|
||||
import net.minecraft.village.VillagerData;
|
||||
import net.minecraft.village.VillagerProfession;
|
||||
import net.minecraft.world.LocalDifficulty;
|
||||
import net.minecraft.world.ServerWorldAccess;
|
||||
import net.minecraft.world.World;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(VillagerEntity.class)
|
||||
public abstract class MixinVillagerEntity extends MerchantEntity {
|
||||
@@ -19,11 +26,43 @@ public abstract class MixinVillagerEntity extends MerchantEntity {
|
||||
|
||||
@Shadow protected abstract void decayGossip();
|
||||
|
||||
@Unique
|
||||
int tickCount = 0;
|
||||
|
||||
public MixinVillagerEntity(EntityType<? extends MerchantEntity> entityType, World world) {
|
||||
super(entityType, world);
|
||||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "initialize")
|
||||
private void injectInitialize(ServerWorldAccess world, LocalDifficulty difficulty, SpawnReason spawnReason, EntityData entityData, CallbackInfoReturnable<EntityData> cir) {
|
||||
if (SLSCarpetSettings.printStackTraceOnVillagerSpawn) {
|
||||
var logBuilder = new StringBuilder("\n=== Villager Spawn Report ===\n");
|
||||
logBuilder.append("// Generated by Carpet SLS Addition\n");
|
||||
try {
|
||||
logBuilder.append("- Spawn Reason: ").append(spawnReason.toString()).append("\n");
|
||||
logBuilder.append("- World: ").append(this.getWorld().getRegistryKey().getValue().toString()).append("\n");
|
||||
logBuilder.append("- Position: ").append("(x=%.2f, y=%.2f, z=%.2f)".formatted(this.getX(), this.getY(), this.getZ())).append("\n");
|
||||
logBuilder.append("- Stack Trance: ");
|
||||
|
||||
var exception = new Exception();
|
||||
for (var element : exception.getStackTrace()) {
|
||||
logBuilder.append("\n ").append(element.toString());
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
logBuilder.append("// Sorry but we fail to generate the villager spawn report.\n");
|
||||
logBuilder.append("- Error Stack Trance: ");
|
||||
|
||||
for (var element : e.getStackTrace()) {
|
||||
logBuilder.append("\n ").append(element.toString());
|
||||
}
|
||||
}
|
||||
|
||||
logBuilder.append("\n ================================");
|
||||
ServerMain.LOGGER.warn(logBuilder.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "tick", cancellable = true)
|
||||
private void onTick(CallbackInfo ci) {
|
||||
if (SLSCarpetSettings.skipTicksForJoblessVillager != 0) {
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"carpet.rule.enableCCESuppressor.name": "Enable CCE suppressor.",
|
||||
"carpet.rule.fakePlayersNotOccupiedSleepQuota.name": "Fake players do not occupy sleep quotas.",
|
||||
"carpet.rule.endermanCanPickUpMushroom.name": "Enderman can pick up mushroom",
|
||||
"carpet.rule.printStackTraceOnVillagerSpawn.name": "Print the stack trace when a villager spawns",
|
||||
|
||||
"carpet.rule.obtainableReinforcedDeepSlate.desc": "When an anvil falls on 64 dropped deepslates, they will be turned in a reinforced deepslate instead of disappearing.",
|
||||
"carpet.rule.skipTicksForJoblessVillager.desc": "For jobless/nitwit villagers, after performing a set number of tick operations, skip the 1 tick operation.",
|
||||
@@ -41,6 +42,7 @@
|
||||
"carpet.rule.enableCCESuppressor.desc": "Make CCE suppressors from 1.20.1 and earlier versions available again.",
|
||||
"carpet.rule.fakePlayersNotOccupiedSleepQuota.desc": "Make the fake player generated by Carpet no longer occupy sleep quotas",
|
||||
"carpet.rule.endermanCanPickUpMushroom.desc": "Enderman can pick up the mushroom plant if enabled",
|
||||
"carpet.rule.printStackTraceOnVillagerSpawn.desc": "Print the report to the server console when a villager spawns",
|
||||
|
||||
"carpet.rule.skipTicksForJoblessVillager.extra.0": "Set to 0 to maintain the vanilla behavior",
|
||||
"carpet.rule.skipTicksForJoblessVillager.extra.1": "Set to a number greater than 0, the value will be +1 based on the setting",
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"carpet.rule.enableCCESuppressor.name": "恢复CCE抑制器",
|
||||
"carpet.rule.fakePlayersNotOccupiedSleepQuota.name": "假人不占用睡眠名额",
|
||||
"carpet.rule.endermanCanPickUpMushroom.name": "末影人可拿起蘑菇",
|
||||
"carpet.rule.printStackTraceOnVillagerSpawn.name": "打印村民生成报告",
|
||||
|
||||
"carpet.rule.obtainableReinforcedDeepSlate.desc": "当铁砧在64个深板岩的掉落物上时,可以获得强化深板岩",
|
||||
"carpet.rule.skipTicksForJoblessVillager.desc": "对于无业/傻子村民,执行设定数量的tick运算后,跳过1tick的运算",
|
||||
@@ -41,6 +42,7 @@
|
||||
"carpet.rule.enableCCESuppressor.desc": "让1.20.1及更早的CCE抑制器变得再次可用",
|
||||
"carpet.rule.fakePlayersNotOccupiedSleepQuota.desc": "让假人不再占用睡眠名额,这样即使假人不睡觉也能跳过夜晚",
|
||||
"carpet.rule.endermanCanPickUpMushroom.desc": "如果该选项打开,则末影人可以捡起地上的蘑菇",
|
||||
"carpet.rule.printStackTraceOnVillagerSpawn.desc": "当有村民生成时,将会生成一份包含调用栈的报告,显示在控制端中",
|
||||
|
||||
"carpet.rule.skipTicksForJoblessVillager.extra.0": "设置为0则保持原版行为",
|
||||
"carpet.rule.skipTicksForJoblessVillager.extra.1": "设置为大于0的数,将在设置的基础上将该值+1",
|
||||
|
||||
@@ -22,9 +22,7 @@
|
||||
"entity.MixinServerPlayerEntity",
|
||||
"entity.MixinVillagerEntity",
|
||||
"player.MixinPlayerInventory",
|
||||
"player.AccessorPlayerAbilities",
|
||||
"screen.MixinAnvilScreenHandler",
|
||||
"screen.MixinSlot",
|
||||
"server.MixinMinecraftServer",
|
||||
"shulker.MixinItemStack",
|
||||
"shulker.MixinScreenHandler",
|
||||
|
||||
Reference in new issue
Block a user