From 22c788bf58785a79d495c2e37846992dd5c65093 Mon Sep 17 00:00:00 2001 From: gnembon Date: Wed, 4 Feb 2026 12:01:39 +0100 Subject: [PATCH] 26.1-snap-6 --- gradle.properties | 2 +- .../java/carpet/fakes/BrainInterface.java | 10 +++++++++ .../carpet/fakes/ServerWorldInterface.java | 10 --------- .../carpet/mixins/Brain_scarpetMixin.java | 22 +++++++++++++++++++ .../ChunkMap_scarpetChunkCreationMixin.java | 1 - .../mixins/ServerLevel_scarpetMixin.java | 22 +------------------ .../java/carpet/mixins/Villager_aiMixin.java | 4 ++-- .../java/carpet/script/api/Scoreboards.java | 20 +++++++++-------- .../java/carpet/script/api/WorldAccess.java | 11 ++++++---- .../java/carpet/script/external/Vanilla.java | 12 +++++----- .../java/carpet/script/utils/SystemInfo.java | 2 +- .../java/carpet/script/value/EntityValue.java | 11 +++++----- src/main/resources/carpet.mixins.json | 1 + 13 files changed, 68 insertions(+), 60 deletions(-) create mode 100644 src/main/java/carpet/fakes/BrainInterface.java delete mode 100644 src/main/java/carpet/fakes/ServerWorldInterface.java create mode 100644 src/main/java/carpet/mixins/Brain_scarpetMixin.java diff --git a/gradle.properties b/gradle.properties index a530b575..a584fa26 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ org.gradle.configuration-cache=false # Fabric Properties # check https://fabricmc.net/develop/ - minecraft_version=26.1-snapshot-5 + minecraft_version=26.1-snapshot-6 loader_version=0.18.4 loom_version=1.14-SNAPSHOT diff --git a/src/main/java/carpet/fakes/BrainInterface.java b/src/main/java/carpet/fakes/BrainInterface.java new file mode 100644 index 00000000..d111aec4 --- /dev/null +++ b/src/main/java/carpet/fakes/BrainInterface.java @@ -0,0 +1,10 @@ +package carpet.fakes; + +import net.minecraft.world.entity.ai.memory.MemoryModuleType; +import net.minecraft.world.entity.ai.memory.MemorySlot; + +import java.util.Map; + +public interface BrainInterface { + Map, MemorySlot> getMemoriesCM(); +} diff --git a/src/main/java/carpet/fakes/ServerWorldInterface.java b/src/main/java/carpet/fakes/ServerWorldInterface.java deleted file mode 100644 index 8617acad..00000000 --- a/src/main/java/carpet/fakes/ServerWorldInterface.java +++ /dev/null @@ -1,10 +0,0 @@ -package carpet.fakes; - -import net.minecraft.world.entity.Entity; -import net.minecraft.world.level.entity.LevelEntityGetter; -import net.minecraft.world.level.storage.ServerLevelData; - -public interface ServerWorldInterface { - ServerLevelData getWorldPropertiesCM(); - LevelEntityGetter getEntityLookupCMPublic(); -} diff --git a/src/main/java/carpet/mixins/Brain_scarpetMixin.java b/src/main/java/carpet/mixins/Brain_scarpetMixin.java new file mode 100644 index 00000000..7272908d --- /dev/null +++ b/src/main/java/carpet/mixins/Brain_scarpetMixin.java @@ -0,0 +1,22 @@ +package carpet.mixins; + +import carpet.fakes.BrainInterface; +import net.minecraft.world.entity.ai.Brain; +import net.minecraft.world.entity.ai.memory.MemoryModuleType; +import net.minecraft.world.entity.ai.memory.MemorySlot; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Map; + +@Mixin(Brain.class) +public class Brain_scarpetMixin implements BrainInterface { + @Shadow @Final + private Map, MemorySlot> memories; + + @Override + public Map, MemorySlot> getMemoriesCM() { + return memories; + } +} diff --git a/src/main/java/carpet/mixins/ChunkMap_scarpetChunkCreationMixin.java b/src/main/java/carpet/mixins/ChunkMap_scarpetChunkCreationMixin.java index fa19c497..df49f3d2 100644 --- a/src/main/java/carpet/mixins/ChunkMap_scarpetChunkCreationMixin.java +++ b/src/main/java/carpet/mixins/ChunkMap_scarpetChunkCreationMixin.java @@ -14,7 +14,6 @@ import java.util.function.IntFunction; import java.util.stream.Collectors; import carpet.fakes.SimpleEntityLookupInterface; -import carpet.fakes.ServerWorldInterface; import net.minecraft.util.Util; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.server.MinecraftServer; diff --git a/src/main/java/carpet/mixins/ServerLevel_scarpetMixin.java b/src/main/java/carpet/mixins/ServerLevel_scarpetMixin.java index e03af9c9..8646b9b3 100644 --- a/src/main/java/carpet/mixins/ServerLevel_scarpetMixin.java +++ b/src/main/java/carpet/mixins/ServerLevel_scarpetMixin.java @@ -1,6 +1,5 @@ package carpet.mixins; -import carpet.fakes.ServerWorldInterface; import net.minecraft.core.BlockPos; import net.minecraft.core.Holder; import net.minecraft.core.RegistryAccess; @@ -37,14 +36,12 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; -import java.util.function.Supplier; - import static carpet.script.CarpetEventServer.Event.EXPLOSION; import static carpet.script.CarpetEventServer.Event.LIGHTNING; import static carpet.script.CarpetEventServer.Event.CHUNK_UNLOADED; @Mixin(ServerLevel.class) -public abstract class ServerLevel_scarpetMixin extends Level implements ServerWorldInterface +public abstract class ServerLevel_scarpetMixin extends Level { @Shadow public abstract GameRules getGameRules(); @@ -97,21 +94,4 @@ public abstract class ServerLevel_scarpetMixin extends Level implements ServerWo CHUNK_UNLOADED.onChunkEvent(level, levelChunk.getPos(), false); } } - - @Final - @Shadow - private ServerLevelData serverLevelData; - @Shadow @Final private PersistentEntitySectionManager entityManager; - - @Unique - @Override - public ServerLevelData getWorldPropertiesCM(){ - return serverLevelData; - } - - @Unique - @Override - public LevelEntityGetter getEntityLookupCMPublic() { - return entityManager.getEntityGetter(); - } } diff --git a/src/main/java/carpet/mixins/Villager_aiMixin.java b/src/main/java/carpet/mixins/Villager_aiMixin.java index 4451c8ca..054ad5d6 100644 --- a/src/main/java/carpet/mixins/Villager_aiMixin.java +++ b/src/main/java/carpet/mixins/Villager_aiMixin.java @@ -65,14 +65,14 @@ public abstract class Villager_aiMixin extends AbstractVillager if (MobAI.isTracking(this, MobAI.TrackingType.IRON_GOLEM_SPAWNING)) { long time; - Optional> last_seen = this.brain.getMemories().get(MemoryModuleType.GOLEM_DETECTED_RECENTLY); + Optional last_seen = this.brain.getMemory(MemoryModuleType.GOLEM_DETECTED_RECENTLY); if (!last_seen.isPresent()) { time = 0; } else { - time = last_seen.get().getTimeToLive(); + time = this.brain.getTimeUntilExpiry(MemoryModuleType.GOLEM_DETECTED_RECENTLY); } boolean recentlySeen = time > 0; Optional optional_11 = this.brain.getMemory(MemoryModuleType.LAST_SLEPT); diff --git a/src/main/java/carpet/script/api/Scoreboards.java b/src/main/java/carpet/script/api/Scoreboards.java index 61248e5b..f0e3365c 100644 --- a/src/main/java/carpet/script/api/Scoreboards.java +++ b/src/main/java/carpet/script/api/Scoreboards.java @@ -22,6 +22,7 @@ import java.util.List; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.resources.Identifier; +import net.minecraft.server.MinecraftServer; import net.minecraft.server.ServerScoreboard; import net.minecraft.server.bossevents.CustomBossEvent; import net.minecraft.server.bossevents.CustomBossEvents; @@ -539,7 +540,8 @@ public class Scoreboards expression.addContextFunction("bossbar", -1, (c, t, lv) -> { - CustomBossEvents bossBarManager = ((CarpetContext) c).server().getCustomBossEvents(); + MinecraftServer server = ((CarpetContext) c).server(); + CustomBossEvents bossBarManager = server.getCustomBossEvents(); if (lv.size() > 3) { throw new InternalExpressionException("'bossbar' accepts max three arguments"); @@ -547,7 +549,7 @@ public class Scoreboards if (lv.isEmpty()) { - return ListValue.wrap(bossBarManager.getEvents().stream().map(CustomBossEvent::getTextId).map(Identifier::toString).map(StringValue::of)); + return ListValue.wrap(bossBarManager.getEvents().stream().map(CustomBossEvent::customId).map(Identifier::toString).map(StringValue::of)); } String id = lv.get(0).getString(); @@ -559,7 +561,7 @@ public class Scoreboards { return Value.FALSE; } - return StringValue.of(bossBarManager.create(identifier, Component.literal(id)).getTextId().toString()); + return StringValue.of(bossBarManager.create(server.overworld().getRandom(), identifier, Component.literal(id)).customId().toString()); } String property = lv.get(1).getString(); @@ -591,7 +593,7 @@ public class Scoreboards case "max" -> { if (propertyValue == null) { - return NumericValue.of(bossBar.getMax()); + return NumericValue.of(bossBar.max()); } if (!(propertyValue instanceof final NumericValue number)) { @@ -616,7 +618,7 @@ public class Scoreboards if (propertyValue instanceof final ListValue list) { list.getItems().forEach(v -> { - ServerPlayer player = EntityValue.getPlayerByValue(((CarpetContext) c).server(), propertyValue); + ServerPlayer player = EntityValue.getPlayerByValue(server, propertyValue); if (player != null) { bossBar.addPlayer(player); @@ -624,7 +626,7 @@ public class Scoreboards }); return Value.TRUE; } - ServerPlayer player = EntityValue.getPlayerByValue(((CarpetContext) c).server(), propertyValue); + ServerPlayer player = EntityValue.getPlayerByValue(server, propertyValue); if (player != null) { bossBar.addPlayer(player); @@ -641,7 +643,7 @@ public class Scoreboards { bossBar.removeAllPlayers(); list.getItems().forEach(v -> { - ServerPlayer p = EntityValue.getPlayerByValue(((CarpetContext) c).server(), v); + ServerPlayer p = EntityValue.getPlayerByValue(server, v); if (p != null) { bossBar.addPlayer(p); @@ -649,7 +651,7 @@ public class Scoreboards }); return Value.TRUE; } - ServerPlayer p = EntityValue.getPlayerByValue(((CarpetContext) c).server(), propertyValue); + ServerPlayer p = EntityValue.getPlayerByValue(server, propertyValue); bossBar.removeAllPlayers(); if (p != null) { @@ -674,7 +676,7 @@ public class Scoreboards case "value" -> { if (propertyValue == null) { - return NumericValue.of(bossBar.getValue()); + return NumericValue.of(bossBar.value()); } if (!(propertyValue instanceof final NumericValue number)) { diff --git a/src/main/java/carpet/script/api/WorldAccess.java b/src/main/java/carpet/script/api/WorldAccess.java index a748e752..69c663e7 100644 --- a/src/main/java/carpet/script/api/WorldAccess.java +++ b/src/main/java/carpet/script/api/WorldAccess.java @@ -30,6 +30,7 @@ import carpet.script.value.ValueConversions; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.longs.LongSet; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.Util; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -66,6 +67,7 @@ import net.minecraft.world.level.levelgen.NoiseRouter; import net.minecraft.world.level.levelgen.RandomState; import net.minecraft.world.level.levelgen.structure.Structure; import net.minecraft.world.level.levelgen.structure.StructureType; +import net.minecraft.world.level.saveddata.WeatherData; import net.minecraft.world.level.storage.TagValueInput; import org.apache.commons.lang3.mutable.MutableBoolean; import org.apache.commons.lang3.tuple.Pair; @@ -436,6 +438,7 @@ public class WorldAccess expression.addContextFunction("weather", -1, (c, t, lv) -> { ServerLevel world = ((CarpetContext) c).level(); + MinecraftServer server = world.getServer(); if (lv.isEmpty())//cos it can thunder when raining or when clear. { @@ -443,7 +446,7 @@ public class WorldAccess } Value weather = lv.get(0); - ServerLevelData worldProperties = Vanilla.ServerLevel_getWorldProperties(world); + WeatherData worldProperties = server.getWeatherData(); if (lv.size() == 1) { return new NumericValue(switch (weather.getString().toLowerCase(Locale.ROOT)) @@ -459,9 +462,9 @@ public class WorldAccess int ticks = NumericValue.asNumber(lv.get(1), "tick_time in 'weather'").getInt(); switch (weather.getString().toLowerCase(Locale.ROOT)) { - case "clear" -> world.setWeatherParameters(ticks, 0, false, false); - case "rain" -> world.setWeatherParameters(0, ticks, true, false); - case "thunder" -> world.setWeatherParameters( + case "clear" -> server.setWeatherParameters(ticks, 0, false, false); + case "rain" -> server.setWeatherParameters(0, ticks, true, false); + case "thunder" -> server.setWeatherParameters( 0, ticks,//this is used to set thunder time, idk why... true, diff --git a/src/main/java/carpet/script/external/Vanilla.java b/src/main/java/carpet/script/external/Vanilla.java index 3a5f1852..a7bce205 100644 --- a/src/main/java/carpet/script/external/Vanilla.java +++ b/src/main/java/carpet/script/external/Vanilla.java @@ -35,8 +35,11 @@ import net.minecraft.world.Container; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.Brain; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.GoalSelector; +import net.minecraft.world.entity.ai.memory.MemoryModuleType; +import net.minecraft.world.entity.ai.memory.MemorySlot; import net.minecraft.world.entity.ai.village.poi.PoiRecord; import net.minecraft.world.entity.animal.equine.AbstractHorse; import net.minecraft.world.entity.item.ItemEntity; @@ -101,11 +104,6 @@ public class Vanilla return ((Scoreboard_scarpetMixin) scoreboard).getObjectivesByCriterion(); } - public static ServerLevelData ServerLevel_getWorldProperties(ServerLevel world) - { - return ((ServerWorldInterface) world).getWorldPropertiesCM(); - } - public static Long2ObjectOpenHashMap> ChunkTicketManager_getTicketsByPosition(DistanceManager ticketManager) { return ((TicketsFetcherInterface) ticketManager).getTicketsByPosition(); @@ -166,6 +164,10 @@ public class Vanilla return MapValue.wrap(ret); } + public static Map, MemorySlot> Brain_getMemories(Brain brain) { + return ((BrainInterface) brain).getMemoriesCM(); + } + public static LevelStorageSource.LevelStorageAccess MinecraftServer_storageSource(MinecraftServer server) { return ((MinecraftServerInterface) server).getCMSession(); diff --git a/src/main/java/carpet/script/utils/SystemInfo.java b/src/main/java/carpet/script/utils/SystemInfo.java index a49f44d5..c6e30b2d 100644 --- a/src/main/java/carpet/script/utils/SystemInfo.java +++ b/src/main/java/carpet/script/utils/SystemInfo.java @@ -78,7 +78,7 @@ public class SystemInfo put("world_time", c -> new NumericValue(c.level().getGameTime())); - put("game_difficulty", c -> StringValue.of(c.server().getWorldData().getDifficulty().getKey())); + put("game_difficulty", c -> StringValue.of(c.server().getWorldData().getDifficulty().getSerializedName())); put("game_hardcore", c -> BooleanValue.of(c.server().getWorldData().isHardcore())); put("game_storage_format", c -> StringValue.of(c.server().getWorldData().getStorageVersionName(c.server().getWorldData().getVersion()))); put("game_default_gamemode", c -> StringValue.of(c.server().getDefaultGameType().getName())); diff --git a/src/main/java/carpet/script/value/EntityValue.java b/src/main/java/carpet/script/value/EntityValue.java index 13f90b6c..9e65e378 100644 --- a/src/main/java/carpet/script/value/EntityValue.java +++ b/src/main/java/carpet/script/value/EntityValue.java @@ -60,6 +60,7 @@ import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.MoveTowardsRestrictionGoal; import net.minecraft.world.entity.ai.memory.ExpirableValue; import net.minecraft.world.entity.ai.memory.MemoryModuleType; +import net.minecraft.world.entity.ai.memory.MemorySlot; import net.minecraft.world.entity.animal.golem.IronGolem; import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.item.ItemEntity; @@ -589,15 +590,13 @@ public class EntityValue extends Value if (e instanceof LivingEntity livingEntity) { Brain brain = livingEntity.getBrain(); - Map, Optional>> memories = brain.getMemories(); - Optional> optmemory = memories.get(moduleType); - if (optmemory == null || !optmemory.isPresent()) + Map, MemorySlot> memories = Vanilla.Brain_getMemories(brain); + MemorySlot optmemory = memories.get(moduleType); + if (optmemory == null) { return Value.NULL; } - ExpirableValue memory = optmemory.get(); - return ValueConversions.fromTimedMemory(e, memory.getTimeToLive(), memory.getValue()); - } + return ValueConversions.fromTimedMemory(e, optmemory.timeToLive(), optmemory.value()); } return Value.NULL; }); put("gamemode_id", (e, a) -> e instanceof ServerPlayer sp ? new NumericValue(sp.gameMode.getGameModeForPlayer().getId()) : Value.NULL); diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index ea6587fa..2b09a204 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -148,6 +148,7 @@ "CommandDispatcher_scarpetCommandsMixin", "FoodData_scarpetMixin", "CommandSourceStack_scarpetMixin", + "Brain_scarpetMixin", "BlockInput_scarpetMixin", "BlockPredicate_scarpetMixin",