Fix some stuff, updated api to 1.2.2

This commit is contained in:
IzzelAliz 2021-12-03 16:52:33 +08:00
parent 76530963d9
commit baf681d166
No known key found for this signature in database
GPG Key ID: EE50E123A11D8338
13 changed files with 40 additions and 24 deletions

View File

@ -3,7 +3,9 @@ package io.izzel.arclight.common.mixin.core.network.protocol.game;
import io.izzel.arclight.common.bridge.core.world.border.WorldBorderBridge;
import net.minecraft.network.protocol.game.ClientboundSetBorderCenterPacket;
import net.minecraft.world.level.border.WorldBorder;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
@ -13,8 +15,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public class SWorldBorderPacketMixin {
// @formatter:off
@Shadow private double newCenterX;
@Shadow private double newCenterZ;
@Shadow @Final @Mutable private double newCenterX;
@Shadow @Final @Mutable private double newCenterZ;
// @formatter:on
@Inject(method = "<init>(Lnet/minecraft/world/level/border/WorldBorder;)V", at = @At("RETURN"))

View File

@ -325,7 +325,7 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
@Inject(method = "createLevels", at = @At(value = "NEW", ordinal = 0, target = "net/minecraft/server/level/ServerLevel"))
private void arclight$registerEnv(ChunkProgressListener p_240787_1_, CallbackInfo ci) {
BukkitRegistry.registerEnvironments();
BukkitRegistry.registerEnvironments(this.worldData.worldGenSettings().dimensions());
}
@Redirect(method = "createLevels", at = @At(value = "INVOKE", remap = false, target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"))

View File

@ -35,7 +35,7 @@ public abstract class DistanceManagerMixin implements TicketManagerBridge {
// @formatter:on
@Inject(method = "removePlayer", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", remap = false, target = "Lit/unimi/dsi/fastutil/objects/ObjectSet;remove(Ljava/lang/Object;)Z"))
private void arclight$remove(SectionPos p_140829_, ServerPlayer p_140830_, CallbackInfo ci, long l, ObjectSet<?> set) {
private void arclight$remove(SectionPos p_140829_, ServerPlayer p_140830_, CallbackInfo ci, ChunkPos pos, long l, ObjectSet<?> set) {
if (set == null) {
ci.cancel();
}

View File

@ -18,6 +18,7 @@ import io.izzel.arclight.common.mod.util.ArclightCaptures;
import io.izzel.arclight.common.mod.util.DelegateWorldInfo;
import io.izzel.arclight.i18n.ArclightConfig;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientboundLevelParticlesPacket;
@ -65,6 +66,7 @@ import org.bukkit.event.world.PortalCreateEvent;
import org.bukkit.event.world.TimeSkipEvent;
import org.bukkit.event.world.WorldSaveEvent;
import org.objectweb.asm.Opcodes;
import org.spigotmc.SpigotWorldConfig;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
@ -105,10 +107,11 @@ public abstract class ServerLevelMixin extends LevelMixin implements ServerWorld
private int tickPosition;
public LevelStorageSource.LevelStorageAccess convertable;
public UUID uuid;
public ResourceKey<LevelStem> typeKey;
@Override
public ResourceKey<LevelStem> getTypeKey() {
return ((LevelStorageSourceBridge.LevelStorageAccessBridge) this.convertable).bridge$getTypeKey();
return this.typeKey;
}
public void arclight$constructor(MinecraftServer server, Executor backgroundExecutor, LevelStorageSource.LevelStorageAccess levelSave, ServerLevelData serverWorldInfo, ResourceKey<net.minecraft.world.level.Level> dimension, DimensionType dimensionType, ChunkProgressListener statusListener, ChunkGenerator chunkGenerator, boolean isDebug, long seed, List<CustomSpawner> specialSpawners, boolean shouldBeTicking) {
@ -131,7 +134,18 @@ public abstract class ServerLevelMixin extends LevelMixin implements ServerWorld
private void arclight$init(MinecraftServer minecraftServer, Executor backgroundExecutor, LevelStorageSource.LevelStorageAccess levelSave, ServerLevelData worldInfo, ResourceKey<net.minecraft.world.level.Level> dimension, DimensionType dimensionType, ChunkProgressListener statusListener, ChunkGenerator chunkGenerator, boolean isDebug, long seed, List<CustomSpawner> specialSpawners, boolean shouldBeTicking, CallbackInfo ci) {
this.pvpMode = minecraftServer.isPvpAllowed();
this.convertable = levelSave;
this.uuid = WorldUUID.getUUID(levelSave.getDimensionPath(this.dimension()).toFile());
var typeKey = ((LevelStorageSourceBridge.LevelStorageAccessBridge) levelSave).bridge$getTypeKey();
if (typeKey != null) {
this.typeKey = typeKey;
} else {
var dimensions = shadow$getServer().getWorldData().worldGenSettings().dimensions();
var levelStem = dimensions.get(dimension.location());
if (levelStem != null) {
this.typeKey = ResourceKey.create(Registry.LEVEL_STEM_REGISTRY, dimension.location());
} else {
throw new IllegalStateException("No level stem for dimension " + dimension.location());
}
}
if (worldInfo instanceof PrimaryLevelData) {
this.$$worldDataServer = (PrimaryLevelData) worldInfo;
} else if (worldInfo instanceof DerivedLevelData) {
@ -142,6 +156,8 @@ public abstract class ServerLevelMixin extends LevelMixin implements ServerWorld
WorldSymlink.create((DerivedLevelData) worldInfo, levelSave.getDimensionPath(this.dimension()).toFile());
}
}
this.spigotConfig = new SpigotWorldConfig(worldInfo.getLevelName());
this.uuid = WorldUUID.getUUID(levelSave.getDimensionPath(this.dimension()).toFile());
((ServerChunkProviderBridge) this.chunkSource).bridge$setViewDistance(spigotConfig.viewDistance);
((WorldInfoBridge) this.$$worldDataServer).bridge$setWorld((ServerLevel) (Object) this);
}

View File

@ -110,7 +110,6 @@ public abstract class LevelMixin implements WorldBridge, LevelWriter {
@Inject(method = "<init>(Lnet/minecraft/world/level/storage/WritableLevelData;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/DimensionType;Ljava/util/function/Supplier;ZZJ)V", at = @At("RETURN"))
private void arclight$init(WritableLevelData info, ResourceKey<Level> dimension, DimensionType dimType, Supplier<ProfilerFiller> profiler, boolean isRemote, boolean isDebug, long seed, CallbackInfo ci) {
this.spigotConfig = new SpigotWorldConfig(((ServerLevelData) info).getLevelName());
((WorldBorderBridge) this.worldBorder).bridge$setWorld((Level) (Object) this);
this.ticksPerAnimalSpawns = this.getCraftServer().getTicksPerAnimalSpawns();
this.ticksPerMonsterSpawns = this.getCraftServer().getTicksPerMonsterSpawns();

View File

@ -6,7 +6,6 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.ai.village.poi.PoiManager;
import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ProtoChunk;
import net.minecraft.world.level.chunk.storage.ChunkSerializer;
import org.bukkit.craftbukkit.v.persistence.CraftPersistentDataContainer;
import org.spongepowered.asm.mixin.Mixin;
@ -19,7 +18,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
public class ChunkSerializerMixin {
@Redirect(method = "read", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/chunk/ChunkAccess;setLightCorrect(Z)V"))
private static void arclight$loadPersistent(ChunkAccess instance, boolean correct, ServerLevel level, PoiManager poiManager, ChunkPos pos, CompoundTag tag, CallbackInfoReturnable<ProtoChunk> cir) {
private static void arclight$loadPersistent(ChunkAccess instance, boolean correct, ServerLevel level, PoiManager poiManager, ChunkPos pos, CompoundTag tag) {
net.minecraft.nbt.Tag persistentBase = tag.get("ChunkBukkitValues");
if (persistentBase instanceof CompoundTag) {
((CraftPersistentDataContainer) ((ChunkAccessBridge) instance).bridge$getPersistentDataContainer()).putAll((CompoundTag) persistentBase);

View File

@ -14,8 +14,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@Mixin(RegionFileStorage.class)
public abstract class RegionFileCacheMixin implements RegionFileCacheBridge {
@ -33,8 +34,8 @@ public abstract class RegionFileCacheMixin implements RegionFileCacheBridge {
@Inject(method = "getRegionFile", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD,
at = @At(value = "NEW", target = "net/minecraft/world/level/chunk/storage/RegionFile"))
private void arclight$retIfSearch(ChunkPos pos, CallbackInfoReturnable<RegionFile> cir, long l, RegionFile rf, File file) {
if (arclight$existOnly && !file.exists()) cir.setReturnValue(null);
private void arclight$retIfSearch(ChunkPos pos, CallbackInfoReturnable<RegionFile> cir, long l, RegionFile rf, Path path) {
if (arclight$existOnly && !Files.exists(path)) cir.setReturnValue(null);
}
@Inject(method = "read", at = @At("HEAD"))

View File

@ -38,7 +38,7 @@ public abstract class PortalForcerMixin implements TeleporterBridge {
@Shadow public abstract Optional<BlockUtil.FoundRectangle> findPortalAround(BlockPos p_192986_, boolean p_192987_, WorldBorder p_192988_);
// @formatter:on
@ModifyVariable(method = "findPortalAround", index = 4, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/village/poi/PoiManager;ensureLoadedAndValid(Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;I)V"))
@ModifyVariable(method = "findPortalAround", index = 5, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/ai/village/poi/PoiManager;ensureLoadedAndValid(Lnet/minecraft/world/level/LevelReader;Lnet/minecraft/core/BlockPos;I)V"))
private int arclight$useSearchRadius(int i) {
return this.arclight$searchRadius == -1 ? i : this.arclight$searchRadius;
}

View File

@ -12,7 +12,6 @@ import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.io.File;
import java.nio.file.Path;
@Mixin(LevelStorageSource.LevelStorageAccess.class)
@ -42,13 +41,13 @@ public class LevelStorageSource_LevelStorageAccessMixin implements LevelStorageS
}
@Inject(method = "getDimensionPath", cancellable = true, at = @At("HEAD"))
private void arclight$useActualType(ResourceKey<Level> dimensionKey, CallbackInfoReturnable<File> cir) {
private void arclight$useActualType(ResourceKey<Level> dimensionKey, CallbackInfoReturnable<Path> cir) {
if (dimensionType == LevelStem.OVERWORLD) {
cir.setReturnValue(this.levelPath.toFile());
cir.setReturnValue(this.levelPath);
} else if (dimensionType == LevelStem.NETHER) {
cir.setReturnValue(new File(this.levelPath.toFile(), "DIM-1"));
cir.setReturnValue(this.levelPath.resolve("DIM-1"));
} else if (dimensionType == LevelStem.END) {
cir.setReturnValue(new File(this.levelPath.toFile(), "DIM1"));
cir.setReturnValue(this.levelPath.resolve("DIM1"));
}
}
}

View File

@ -16,6 +16,7 @@ import io.izzel.arclight.common.mod.util.types.ArclightPotionEffect;
import io.izzel.arclight.i18n.ArclightConfig;
import io.izzel.arclight.i18n.conf.EntityPropertySpec;
import io.izzel.arclight.i18n.conf.MaterialPropertySpec;
import net.minecraft.core.MappedRegistry;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
@ -206,11 +207,10 @@ public class BukkitRegistry {
ArclightMod.LOGGER.info("registry.villager-profession", newTypes.size());
}
public static void registerEnvironments() {
public static void registerEnvironments(MappedRegistry<LevelStem> dimensions) {
int i = World.Environment.values().length;
List<World.Environment> newTypes = new ArrayList<>();
Registry<LevelStem> registry = ArclightServer.getMinecraftServer().registryAccess().registryOrThrow(Registry.LEVEL_STEM_REGISTRY);
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : registry.entrySet()) {
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : dimensions.entrySet()) {
ResourceKey<LevelStem> key = entry.getKey();
World.Environment environment = DIM_MAP.get(key);
if (environment == null) {

View File

@ -55,7 +55,7 @@ def embedLibs = [/*"org.spongepowered:mixin:$mixinVersion", */ 'org.yaml:snakeya
'org.apache.maven:maven-repository-metadata:3.8.1', 'org.apache.maven.resolver:maven-resolver-api:1.6.2',
'org.apache.maven.resolver:maven-resolver-spi:1.6.2', 'org.apache.maven.resolver:maven-resolver-util:1.6.2',
'org.apache.maven.resolver:maven-resolver-impl:1.6.2', 'org.apache.httpcomponents:httpclient:4.5.12',
'org.apache.httpcomponents:httpcore:4.4.13',/* 'commons-codec:commons-codec:1.11',*/
'org.apache.httpcomponents:httpcore:4.4.13', 'commons-codec:commons-codec:1.15',
'org.slf4j:jcl-over-slf4j:1.7.30', /*'org.apache.logging.log4j:log4j-slf4j18-impl:2.14.1',*/
'org.spongepowered:configurate-hocon:3.6.1', 'org.spongepowered:configurate-core:3.6.1',
'com.typesafe:config:1.3.1']

View File

@ -27,7 +27,7 @@ public class AbstractBootstrap {
}
protected void setupMod() throws Exception {
ArclightVersion.setVersion(ArclightVersion.v1_17_R1);
ArclightVersion.setVersion(ArclightVersion.v1_18_R1);
try (InputStream stream = getClass().getModule().getResourceAsStream("/META-INF/MANIFEST.MF")) {
Manifest manifest = new Manifest(stream);
Attributes attributes = manifest.getMainAttributes();

View File

@ -15,7 +15,7 @@ allprojects {
agpVersion = '1.21'
minecraftVersion = '1.18'
forgeVersion = '38.0.12'
apiVersion = '1.2.+'
apiVersion = '1.2.2'
toolsVersion = '1.3.+'
mixinVersion = '0.8.5'
gitHash = getGitHash()