Update to 1.18.2 (#510)

Update dependencies and upstream
This commit is contained in:
Joseph Tarbit 2022-03-05 16:54:32 +00:00 committed by IzzelAliz
parent e2655bbd39
commit c5a43fd480
No known key found for this signature in database
GPG Key ID: EE50E123A11D8338
32 changed files with 107 additions and 100 deletions

View File

@ -6,7 +6,7 @@ A Bukkit server implementation utilizing Mixin.
| Minecraft | Forge | Status | Build |
| :----: |:-------:| :---: | :---: |
| 1.18.x | 39.1.2 | ACTIVE | [![1.18 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-18?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-18) |
| 1.18.x | 40.0.12 | ACTIVE | [![1.18 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-18?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-18) |
| 1.17.x | 37.1.0 | [LEGACY](https://github.com/IzzelAliz/Arclight/releases/tag/1.17/1.0.2) | [![1.17 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-17?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-17) |
| 1.16.x | 36.2.26 | ACTIVE | [![1.16 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-16?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-16) |
| 1.15.x | 31.2.48 | [LEGACY](https://github.com/IzzelAliz/Arclight/releases/tag/1.15/1.0.19) | [![1.15 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-15?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-15) |

View File

@ -24,7 +24,7 @@ apply plugin: 'io.izzel.arclight'
arclight {
mcVersion = minecraftVersion
forgeVersion = project.ext.forgeVersion
bukkitVersion = 'v1_18_R1'
bukkitVersion = 'v1_18_R2'
wipeVersion = true
reobfVersion = true
accessTransformer = project.file('bukkit.at')
@ -50,12 +50,13 @@ repositories {
maven { url = 'https://files.minecraftforge.net/maven/' }
maven { url = 'https://jitpack.io/' }
maven { url = 'https://maven.izzel.io/releases' }
mavenCentral()
}
dependencies {
minecraft "net.minecraftforge:forge:$minecraftVersion-$forgeVersion"
implementation "org.spigotmc:spigot-api:$minecraftVersion-R0.1-SNAPSHOT@jar"
implementation 'org.jetbrains:annotations:22.0.0'
implementation 'org.jetbrains:annotations:23.0.0'
implementation "org.spongepowered:mixin:$mixinVersion"
annotationProcessor 'org.spongepowered:mixin:0.8.3:processor'
@ -68,7 +69,7 @@ dependencies {
implementation 'org.apache.logging.log4j:log4j-jul:2.15.0'
implementation 'net.md-5:bungeecord-chat:1.16-R0.4'
implementation 'mysql:mysql-connector-java:5.1.49'
implementation 'org.yaml:snakeyaml:1.27'
implementation 'org.yaml:snakeyaml:1.30'
implementation "io.izzel:tools:$toolsVersion"
implementation "io.izzel.arclight:arclight-api:$apiVersion"
implementation project(':i18n-config')

View File

@ -2,13 +2,12 @@ package io.izzel.arclight.common.mixin.bukkit;
import io.izzel.arclight.common.bridge.bukkit.MaterialBridge;
import io.izzel.arclight.common.mod.util.ResourceLocationUtil;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraftforge.registries.ForgeRegistries;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.block.BlockState;
import org.bukkit.craftbukkit.v.block.CraftBlock;
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
@ -36,16 +35,7 @@ public abstract class CraftBlockMixin {
* @reason
*/
@Overwrite
public static Biome biomeBaseToBiome(Registry<net.minecraft.world.level.biome.Biome> registry, net.minecraft.world.level.biome.Biome base) {
return Biome.valueOf(ResourceLocationUtil.standardize(base.getRegistryName()));
}
/**
* @author IzzelAliz
* @reason
*/
@Overwrite
public static net.minecraft.world.level.biome.Biome biomeToBiomeBase(Registry<net.minecraft.world.level.biome.Biome> registry, Biome bio) {
return ForgeRegistries.BIOMES.getValue(CraftNamespacedKey.toMinecraft(bio.getKey()));
public static Biome biomeBaseToBiome(Registry<net.minecraft.world.level.biome.Biome> registry, Holder<net.minecraft.world.level.biome.Biome> base) {
return Biome.valueOf(ResourceLocationUtil.standardize(base.value().getRegistryName()));
}
}

View File

@ -5,7 +5,7 @@ import io.netty.buffer.Unpooled;
import net.minecraft.commands.synchronization.ArgumentTypes;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.spigotmc.SpigotConfig;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -26,12 +26,12 @@ import net.minecraft.util.CryptException;
import net.minecraft.world.entity.player.Player;
import net.minecraftforge.fml.util.thread.SidedThreadGroups;
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v.CraftServer;
import org.bukkit.craftbukkit.v.util.Waitable;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerPreLoginEvent;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;

View File

@ -71,7 +71,7 @@ import net.minecraft.world.phys.HitResult;
import net.minecraft.world.phys.Vec3;
import net.minecraftforge.common.ForgeHooks;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;

View File

@ -8,7 +8,7 @@ import net.minecraft.network.protocol.PacketUtils;
import net.minecraft.server.RunningOnDifferentThreadException;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import net.minecraft.util.thread.BlockableEventLoop;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v.CraftServer;
import org.spongepowered.asm.mixin.Final;

View File

@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableList;
import com.mojang.authlib.GameProfileRepository;
import com.mojang.authlib.minecraft.MinecraftSessionService;
import com.mojang.datafixers.DataFixer;
import com.mojang.serialization.DynamicOps;
import io.izzel.arclight.common.bridge.core.command.ICommandSourceBridge;
import io.izzel.arclight.common.bridge.core.server.MinecraftServerBridge;
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
@ -28,19 +29,23 @@ import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.protocol.status.ServerStatus;
import net.minecraft.obfuscate.DontObfuscate;
import net.minecraft.resources.RegistryReadOps;
import net.minecraft.resources.RegistryOps;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.ReloadableServerResources;
import net.minecraft.server.ServerFunctionManager;
import net.minecraft.server.ServerResources;
import net.minecraft.server.TickTask;
import net.minecraft.server.WorldStem;
import net.minecraft.server.level.ServerChunkCache;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.TicketType;
import net.minecraft.server.level.progress.ChunkProgressListener;
import net.minecraft.server.level.progress.ChunkProgressListenerFactory;
import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.repository.Pack;
import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.server.packs.resources.CloseableResourceManager;
import net.minecraft.server.packs.resources.MultiPackResourceManager;
import net.minecraft.server.players.GameProfileCache;
import net.minecraft.server.players.PlayerList;
import net.minecraft.util.Unit;
@ -58,10 +63,8 @@ import net.minecraft.world.level.storage.LevelStorageSource;
import net.minecraft.world.level.storage.ServerLevelData;
import net.minecraft.world.level.storage.WorldData;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.world.StructureSpawnManager;
import net.minecraftforge.internal.BrandingControl;
import net.minecraftforge.server.ServerLifecycleHooks;
import org.apache.logging.log4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
@ -72,6 +75,7 @@ import org.bukkit.event.server.ServerLoadEvent;
import org.bukkit.event.world.WorldInitEvent;
import org.bukkit.event.world.WorldLoadEvent;
import org.bukkit.plugin.PluginLoadOrder;
import org.slf4j.Logger;
import org.spigotmc.WatchdogThread;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@ -140,11 +144,11 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
@Shadow private float averageTickTime;
@Shadow @Final @Nullable private GameProfileCache profileCache;
@Shadow @Final private PackRepository packRepository;
@Shadow @Final public RegistryAccess.RegistryHolder registryHolder;
@Shadow public abstract boolean isDedicatedServer();
@Shadow public abstract int getFunctionCompilationLevel();
@Shadow @Final public Executor executor;
@Shadow public ServerResources resources;
@Shadow public abstract RegistryAccess.Frozen registryAccess();
@Shadow public MinecraftServer.ReloadableResources resources;
@Shadow private static DataPackConfig getSelectedPacks(PackRepository p_129818_) { return null; }
@Shadow public abstract PlayerList getPlayerList();
@Shadow @Final private ServerFunctionManager functionManager;
@ -156,7 +160,7 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
}
public DataPackConfig datapackconfiguration;
public RegistryReadOps<Tag> registryreadops;
public DynamicOps<Tag> registryreadops;
private boolean forceTicks;
public CraftServer server;
public OptionSet options;
@ -186,7 +190,7 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
}
@Inject(method = "<init>", at = @At("RETURN"))
public void arclight$loadOptions(Thread serverThread, RegistryAccess.RegistryHolder dynamicRegistries, LevelStorageSource.LevelStorageAccess anvilConverterForAnvilFile, WorldData serverConfig, PackRepository dataPacks, Proxy serverProxy, DataFixer dataFixer, ServerResources dataRegistries, MinecraftSessionService sessionService, GameProfileRepository profileRepo, GameProfileCache profileCache, ChunkProgressListenerFactory chunkStatusListenerFactory, CallbackInfo ci) {
public void arclight$loadOptions(Thread p_206546_, LevelStorageSource.LevelStorageAccess p_206547_, PackRepository p_206548_, WorldStem p_206549_, Proxy p_206550_, DataFixer p_206551_, @Nullable MinecraftSessionService p_206552_, @Nullable GameProfileRepository p_206553_, @Nullable GameProfileCache p_206554_, ChunkProgressListenerFactory p_206555_, CallbackInfo ci) {
String[] arguments = ManagementFactory.getRuntimeMXBean().getInputArguments().toArray(new String[0]);
OptionParser parser = new BukkitOptionParser();
try {
@ -195,8 +199,8 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
e.printStackTrace();
}
this.datapackconfiguration = ArclightCaptures.getDatapackConfig();
this.registryreadops = RegistryReadOps.createAndLoad(NbtOps.INSTANCE, dataRegistries.getResourceManager(), dynamicRegistries);
this.vanillaCommandDispatcher = dataRegistries.getCommands();
this.registryreadops = RegistryOps.create(NbtOps.INSTANCE, p_206549_.registryAccess());
this.vanillaCommandDispatcher = p_206549_.dataPackResources().getCommands();
}
/**
@ -314,7 +318,7 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
}
}
@Inject(method = "stopServer", at = @At(value = "INVOKE", remap = false, ordinal = 0, shift = At.Shift.AFTER, target = "Lorg/apache/logging/log4j/Logger;info(Ljava/lang/String;)V"))
@Inject(method = "stopServer", at = @At(value = "INVOKE", remap = false, ordinal = 0, shift = At.Shift.AFTER, target = "Lorg/slf4j/Logger;info(Ljava/lang/String;)V"))
public void arclight$unloadPlugins(CallbackInfo ci) {
if (this.server != null) {
this.server.disablePlugins();
@ -374,7 +378,6 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
*/
@Overwrite
public void prepareLevels(ChunkProgressListener listener) {
StructureSpawnManager.gatherEntitySpawns();
ServerLevel serverworld = this.overworld();
this.forceTicks = true;
LOGGER.info("Preparing start region for dimension {}", serverworld.dimension().location());
@ -504,21 +507,30 @@ public abstract class MinecraftServerMixin extends ReentrantBlockableEventLoop<T
*/
@Overwrite
public CompletableFuture<Void> reloadResources(Collection<String> p_129862_) {
RegistryAccess.Frozen registryaccess$frozen = this.registryAccess();
CompletableFuture<Void> completablefuture = CompletableFuture.supplyAsync(() -> {
return p_129862_.stream().map(this.packRepository::getPack).filter(Objects::nonNull).map(Pack::open).collect(ImmutableList.toImmutableList());
}, this).thenCompose((p_199990_) -> {
return ServerResources.loadResources(p_199990_, this.registryHolder, this.isDedicatedServer() ? Commands.CommandSelection.DEDICATED : Commands.CommandSelection.INTEGRATED, this.getFunctionCompilationLevel(), this.executor, this);
}).thenAcceptAsync((p_199996_) -> {
}, this).thenCompose((p_212913_) -> {
CloseableResourceManager closeableresourcemanager = new MultiPackResourceManager(PackType.SERVER_DATA, p_212913_);
return ReloadableServerResources.loadResources(closeableresourcemanager, registryaccess$frozen, this.isDedicatedServer() ? Commands.CommandSelection.DEDICATED : Commands.CommandSelection.INTEGRATED, this.getFunctionCompilationLevel(), this.executor, this).whenComplete((p_212907_, p_212908_) -> {
if (p_212908_ != null) {
closeableresourcemanager.close();
}
}).thenApply((p_212904_) -> {
return new MinecraftServer.ReloadableResources(closeableresourcemanager, p_212904_);
});
}).thenAcceptAsync((p_212919_) -> {
this.resources.close();
this.resources = p_199996_;
this.resources= p_212919_;
this.server.syncCommands();
this.packRepository.setSelected(p_129862_);
this.worldData.setDataPackConfig(getSelectedPacks(this.packRepository));
p_199996_.updateGlobals();
this.resources.managers().updateRegistryTags(this.registryAccess());
this.getPlayerList().saveAll();
this.getPlayerList().reloadResources();
this.functionManager.replaceLibrary(this.resources.getFunctionLibrary());
this.structureManager.onResourceManagerReload(this.resources.getResourceManager());
this.functionManager.replaceLibrary(this.resources.managers().getFunctionLibrary());
this.structureManager.onResourceManagerReload(this.resources.resourceManager());
this.getPlayerList().getPlayers().forEach(this.getPlayerList()::sendPlayerPermissionLevel); //Forge: Fix newly added/modified commands not being sent to the client when commands reload.
}, this);
if (this.isSameThread()) {

View File

@ -1,18 +1,18 @@
package io.izzel.arclight.common.mixin.core.server;
import io.izzel.arclight.common.mod.util.ArclightCaptures;
import net.minecraft.server.Main;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.WorldStem;
import net.minecraft.server.packs.repository.PackRepository;
import net.minecraft.world.level.DataPackConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Mixin(Main.class)
public class MainMixin {
@Mixin(WorldStem.class)
public class WorldStemMixin {
@Redirect(method = "main", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;configurePackRepository(Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/world/level/DataPackConfig;Z)Lnet/minecraft/world/level/DataPackConfig;"))
@Redirect(method = "load", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/MinecraftServer;configurePackRepository(Lnet/minecraft/server/packs/repository/PackRepository;Lnet/minecraft/world/level/DataPackConfig;Z)Lnet/minecraft/world/level/DataPackConfig;"))
private static DataPackConfig arclight$captureDatapackCodec(PackRepository p_240772_0_, DataPackConfig p_240772_1_, boolean p_240772_2_) {
DataPackConfig datapackCodec = MinecraftServer.configurePackRepository(p_240772_0_, p_240772_1_, p_240772_2_);
ArclightCaptures.captureDatapackConfig(datapackCodec);

View File

@ -20,6 +20,7 @@ import io.izzel.arclight.common.mod.util.DelegateWorldInfo;
import io.izzel.arclight.common.mod.util.DistValidate;
import io.izzel.arclight.i18n.ArclightConfig;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.particles.ParticleOptions;
import net.minecraft.network.protocol.Packet;
@ -119,11 +120,11 @@ public abstract class ServerLevelMixin extends LevelMixin implements ServerWorld
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) {
public void arclight$constructor(MinecraftServer server, Executor backgroundExecutor, LevelStorageSource.LevelStorageAccess levelSave, ServerLevelData serverWorldInfo, ResourceKey<net.minecraft.world.level.Level> dimension, Holder<DimensionType> dimensionType, ChunkProgressListener statusListener, ChunkGenerator chunkGenerator, boolean isDebug, long seed, List<CustomSpawner> specialSpawners, boolean shouldBeTicking) {
throw new RuntimeException();
}
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, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) {
public void arclight$constructor(MinecraftServer server, Executor backgroundExecutor, LevelStorageSource.LevelStorageAccess levelSave, ServerLevelData serverWorldInfo, ResourceKey<net.minecraft.world.level.Level> dimension, Holder<DimensionType> dimensionType, ChunkProgressListener statusListener, ChunkGenerator chunkGenerator, boolean isDebug, long seed, List<CustomSpawner> specialSpawners, boolean shouldBeTicking, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) {
arclight$constructor(server, backgroundExecutor, levelSave, serverWorldInfo, dimension, dimensionType, statusListener, chunkGenerator, isDebug, seed, specialSpawners, shouldBeTicking);
this.generator = gen;
this.environment = env;
@ -135,8 +136,8 @@ public abstract class ServerLevelMixin extends LevelMixin implements ServerWorld
bridge$getWorld();
}
@Inject(method = "<init>(Lnet/minecraft/server/MinecraftServer;Ljava/util/concurrent/Executor;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/world/level/storage/ServerLevelData;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/DimensionType;Lnet/minecraft/server/level/progress/ChunkProgressListener;Lnet/minecraft/world/level/chunk/ChunkGenerator;ZJLjava/util/List;Z)V", at = @At("RETURN"))
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) {
@Inject(method = "<init>(Lnet/minecraft/server/MinecraftServer;Ljava/util/concurrent/Executor;Lnet/minecraft/world/level/storage/LevelStorageSource$LevelStorageAccess;Lnet/minecraft/world/level/storage/ServerLevelData;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/Holder;Lnet/minecraft/server/level/progress/ChunkProgressListener;Lnet/minecraft/world/level/chunk/ChunkGenerator;ZJLjava/util/List;Z)V", at = @At("RETURN"))
private void arclight$init(MinecraftServer minecraftServer, Executor backgroundExecutor, LevelStorageSource.LevelStorageAccess levelSave, ServerLevelData worldInfo, ResourceKey<net.minecraft.world.level.Level> dimension, Holder<DimensionType> dimensionType, ChunkProgressListener statusListener, ChunkGenerator chunkGenerator, boolean isDebug, long seed, List<CustomSpawner> specialSpawners, boolean shouldBeTicking, CallbackInfo ci) {
this.pvpMode = minecraftServer.isPvpAllowed();
this.convertable = levelSave;
var typeKey = ((LevelStorageSourceBridge.LevelStorageAccessBridge) levelSave).bridge$getTypeKey();

View File

@ -134,7 +134,7 @@ public abstract class PlayerListMixin implements PlayerListBridge {
}
@Inject(method = "<init>", at = @At("RETURN"))
private void arclight$loadServer(MinecraftServer minecraftServer, RegistryAccess.RegistryHolder p_i231425_2_, PlayerDataStorage p_i231425_3_, int p_i231425_4_, CallbackInfo ci) {
private void arclight$loadServer(MinecraftServer minecraftServer, RegistryAccess.Frozen p_i231425_2_, PlayerDataStorage p_i231425_3_, int p_i231425_4_, CallbackInfo ci) {
cserver = ArclightServer.createOrLoad((DedicatedServer) minecraftServer, (PlayerList) (Object) this);
}
@ -324,7 +324,7 @@ public abstract class PlayerListMixin implements PlayerListBridge {
playerIn.setPos(playerIn.getX(), playerIn.getY() + 1.0, playerIn.getZ());
}
LevelData worlddata = serverWorld.getLevelData();
playerIn.connection.send(new ClientboundRespawnPacket(serverWorld.dimensionType(), serverWorld.dimension(), BiomeManager.obfuscateSeed(serverWorld.getSeed()), playerIn.gameMode.getGameModeForPlayer(), playerIn.gameMode.getPreviousGameModeForPlayer(), serverWorld.isDebug(), serverWorld.isFlat(), flag));
playerIn.connection.send(new ClientboundRespawnPacket(serverWorld.dimensionTypeRegistration(), serverWorld.dimension(), BiomeManager.obfuscateSeed(serverWorld.getSeed()), playerIn.gameMode.getGameModeForPlayer(), playerIn.gameMode.getPreviousGameModeForPlayer(), serverWorld.isDebug(), serverWorld.isFlat(), flag));
playerIn.connection.send(new ClientboundSetChunkCacheRadiusPacket(((WorldBridge) serverWorld).bridge$spigotConfig().viewDistance));
playerIn.connection.send(new ClientboundSetSimulationDistancePacket(((WorldBridge) serverWorld).bridge$spigotConfig().simulationDistance));
playerIn.setLevel(serverWorld);
@ -469,7 +469,7 @@ public abstract class PlayerListMixin implements PlayerListBridge {
}
LevelData iworldinfo = serverplayerentity.level.getLevelData();
serverplayerentity.connection.send(new ClientboundRespawnPacket(serverplayerentity.level.dimensionType(), serverplayerentity.level.dimension(), BiomeManager.obfuscateSeed(serverplayerentity.getLevel().getSeed()), serverplayerentity.gameMode.getGameModeForPlayer(), serverplayerentity.gameMode.getPreviousGameModeForPlayer(), serverplayerentity.getLevel().isDebug(), serverplayerentity.getLevel().isFlat(), conqueredEnd));
serverplayerentity.connection.send(new ClientboundRespawnPacket(serverplayerentity.level.dimensionTypeRegistration(), serverplayerentity.level.dimension(), BiomeManager.obfuscateSeed(serverplayerentity.getLevel().getSeed()), serverplayerentity.gameMode.getGameModeForPlayer(), serverplayerentity.gameMode.getPreviousGameModeForPlayer(), serverplayerentity.getLevel().isDebug(), serverplayerentity.getLevel().isFlat(), conqueredEnd));
serverplayerentity.connection.send(new ClientboundSetChunkCacheRadiusPacket(((WorldBridge) serverWorld).bridge$spigotConfig().viewDistance));
serverplayerentity.connection.send(new ClientboundSetSimulationDistancePacket(((WorldBridge) serverWorld).bridge$spigotConfig().simulationDistance));
serverplayerentity.setLevel(serverWorld);

View File

@ -27,6 +27,7 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.tags.FluidTags;
import net.minecraft.tags.Tag;
import net.minecraft.tags.TagKey;
import net.minecraft.util.Mth;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.Entity;
@ -391,7 +392,7 @@ public abstract class EntityMixin implements InternalEntityBridge, EntityBridge,
}
@Redirect(method = "updateFluidHeightAndDoFluidPushing", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/material/FluidState;getFlow(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/phys/Vec3;"))
private Vec3 arclight$setLava(FluidState instance, BlockGetter level, BlockPos pos, Tag<Fluid> tag) {
private Vec3 arclight$setLava(FluidState instance, BlockGetter level, BlockPos pos, TagKey<Fluid> tag) {
if (tag == FluidTags.LAVA) {
lastLavaContact = pos.immutable();
}

View File

@ -127,7 +127,6 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt
@Shadow public int hurtTime;
@Shadow public float hurtDir;
@Shadow public abstract void setLastHurtByMob(@Nullable LivingEntity livingBase);
@Shadow protected abstract void markHurt();
@Shadow @Nullable protected abstract SoundEvent getDeathSound();
@Shadow protected abstract float getSoundVolume();
@Shadow public abstract float getVoicePitch();

View File

@ -119,7 +119,7 @@ public abstract class MobMixin extends LivingEntityMixin implements MobEntityBri
reason = (this.getTarget().isAlive() ? EntityTargetEvent.TargetReason.FORGOT_TARGET : EntityTargetEvent.TargetReason.TARGET_DIED);
}
if (reason == EntityTargetEvent.TargetReason.UNKNOWN) {
ArclightMod.LOGGER.log(Level.WARN, "Unknown target reason setting {} target to {}", this, livingEntity);
ArclightMod.LOGGER.warn("Unknown target reason setting {} target to {}", this, livingEntity);
}
CraftLivingEntity ctarget = null;
if (livingEntity != null) {

View File

@ -71,9 +71,8 @@ public abstract class EnderDragonMixin extends MobMixin {
for (int i3 = k; i3 <= j2; ++i3) {
final BlockPos blockposition = new BlockPos(k2, l2, i3);
final BlockState iblockdata = this.level.getBlockState(blockposition);
final net.minecraft.world.level.block.Block block = iblockdata.getBlock();
if (!iblockdata.isAir() && iblockdata.getMaterial() != Material.FIRE) {
if (net.minecraftforge.common.ForgeHooks.canEntityDestroy(this.level, blockposition, (EnderDragon) (Object) this) && !BlockTags.DRAGON_IMMUNE.contains(block)) {
if (net.minecraftforge.common.ForgeHooks.canEntityDestroy(this.level, blockposition, (EnderDragon) (Object) this) && !iblockdata.is(BlockTags.DRAGON_IMMUNE)) {
flag2 = true;
destroyedBlocks.add(CraftBlock.at(this.level, blockposition));
} else {

View File

@ -5,7 +5,7 @@ import net.minecraft.world.entity.boss.enderdragon.EnderDragon;
import net.minecraft.world.entity.boss.enderdragon.phases.DragonPhaseInstance;
import net.minecraft.world.entity.boss.enderdragon.phases.EnderDragonPhase;
import net.minecraft.world.entity.boss.enderdragon.phases.EnderDragonPhaseManager;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v.entity.CraftEnderDragon;
import org.bukkit.event.entity.EnderDragonChangePhaseEvent;

View File

@ -4,6 +4,7 @@ import io.izzel.arclight.common.mixin.core.world.entity.EntityMixin;
import net.minecraft.core.BlockPos;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.item.FallingBlockEntity;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
@ -36,4 +37,11 @@ public abstract class FallingBlockEntityMixin extends EntityMixin {
private void arclight$damageSourceReset(float distance, float damageMultiplier, DamageSource source, CallbackInfoReturnable<Boolean> cir) {
CraftEventFactory.entityDamage = null;
}
@Inject(method = "fall", cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/Level;setBlock(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;I)Z"))
private static void arclight$entityFall(Level level, BlockPos pos, BlockState state, CallbackInfoReturnable<FallingBlockEntity> cir, FallingBlockEntity entity) {
if (CraftEventFactory.callEntityChangeBlockEvent(entity, pos, state.getFluidState().createLegacyBlock()).isCancelled()) {
cir.setReturnValue(entity);
}
}
}

View File

@ -80,7 +80,7 @@ import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.util.ITeleporter;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.server.ServerLifecycleHooks;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.WeatherType;
@ -490,7 +490,7 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements ServerPla
}
ServerLevel[] exitWorld = new ServerLevel[]{server};
LevelData iworldinfo = server.getLevelData();
this.connection.send(new ClientboundRespawnPacket(server.dimensionType(), server.dimension(), BiomeManager.obfuscateSeed(server.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), server.isDebug(), server.isFlat(), true));
this.connection.send(new ClientboundRespawnPacket(server.dimensionTypeRegistration(), server.dimension(), BiomeManager.obfuscateSeed(server.getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), server.isDebug(), server.isFlat(), true));
this.connection.send(new ClientboundChangeDifficultyPacket(iworldinfo.getDifficulty(), iworldinfo.isDifficultyLocked()));
PlayerList playerlist = this.server.getPlayerList();
playerlist.sendPlayerPermissionLevel((ServerPlayer) (Object) this);
@ -524,7 +524,7 @@ public abstract class ServerPlayerMixin extends PlayerMixin implements ServerPla
if (newWorld != exitWorld[0]) {
exitWorld[0] = newWorld;
LevelData newWorldInfo = exitWorld[0].getLevelData();
this.connection.send(new ClientboundRespawnPacket(exitWorld[0].dimensionType(), exitWorld[0].dimension(), BiomeManager.obfuscateSeed(exitWorld[0].getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), exitWorld[0].isDebug(), exitWorld[0].isFlat(), true));
this.connection.send(new ClientboundRespawnPacket(exitWorld[0].dimensionTypeRegistration(), exitWorld[0].dimension(), BiomeManager.obfuscateSeed(exitWorld[0].getSeed()), this.gameMode.getGameModeForPlayer(), this.gameMode.getPreviousGameModeForPlayer(), exitWorld[0].isDebug(), exitWorld[0].isFlat(), true));
this.connection.send(new ClientboundChangeDifficultyPacket(newWorldInfo.getDifficulty(), newWorldInfo.isDifficultyLocked()));
}

View File

@ -24,6 +24,7 @@ import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.EnchantmentInstance;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.EnchantmentTableBlock;
import net.minecraftforge.event.ForgeEventFactory;
import net.minecraftforge.registries.ForgeRegistries;
import org.bukkit.Bukkit;
@ -56,7 +57,6 @@ public abstract class EnchantmentContainerMixin extends AbstractContainerMenuMix
// @formatter:off
@Shadow @Final private Container enchantSlots;
@Shadow @Final private ContainerLevelAccess access;
@Shadow(remap = false) protected abstract float getPower(Level world, BlockPos pos);
@Shadow @Final private Random random;
@Shadow @Final private DataSlot enchantmentSeed;
@Shadow @Final public int[] costs;
@ -90,21 +90,11 @@ public abstract class EnchantmentContainerMixin extends AbstractContainerMenuMix
this.access.execute((p_217002_2_, p_217002_3_) -> {
float power = 0;
for (int k = -1; k <= 1; ++k) {
for (int l = -1; l <= 1; ++l) {
if ((k != 0 || l != 0) && p_217002_2_.isEmptyBlock(p_217002_3_.offset(l, 0, k)) && p_217002_2_.isEmptyBlock(p_217002_3_.offset(l, 1, k))) {
power += getPower(p_217002_2_, p_217002_3_.offset(l * 2, 0, k * 2));
power += getPower(p_217002_2_, p_217002_3_.offset(l * 2, 1, k * 2));
if (l != 0 && k != 0) {
power += getPower(p_217002_2_, p_217002_3_.offset(l * 2, 0, k));
power += getPower(p_217002_2_, p_217002_3_.offset(l * 2, 1, k));
power += getPower(p_217002_2_, p_217002_3_.offset(l, 0, k * 2));
power += getPower(p_217002_2_, p_217002_3_.offset(l, 1, k * 2));
}
}
for(BlockPos blockpos : EnchantmentTableBlock.BOOKSHELF_OFFSETS) {
if (EnchantmentTableBlock.isValidBookShelf(p_217002_2_, p_217002_3_, blockpos)) {
power += p_217002_2_.getBlockState(p_217002_3_.offset(blockpos)).getEnchantPowerBonus(p_217002_2_, p_217002_3_.offset(blockpos));
}
}
}
this.random.setSeed(this.enchantmentSeed.get());

View File

@ -20,7 +20,7 @@ import net.minecraft.world.item.crafting.RecipeManager;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.Level;
import net.minecraftforge.common.crafting.CraftingHelper;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
@ -91,8 +91,8 @@ public abstract class RecipeManagerMixin implements RecipeManagerBridge {
*/
@Overwrite
public <C extends Container, T extends Recipe<C>> Optional<T> getRecipeFor(RecipeType<T> recipeTypeIn, C inventoryIn, Level worldIn) {
Optional<T> optional = this.byType(recipeTypeIn).values().stream().flatMap((recipe) -> {
return Util.toStream(recipeTypeIn.tryMatch(recipe, worldIn, inventoryIn));
Optional<T> optional = this.byType(recipeTypeIn).values().stream().flatMap((p_44064_) -> {
return recipeTypeIn.tryMatch(p_44064_, worldIn, inventoryIn).stream();
}).findFirst();
((IInventoryBridge) inventoryIn).setCurrentRecipe(optional.orElse(null));
return optional;

View File

@ -29,7 +29,7 @@ public class FrostWalkerEnchantmentMixin {
BlockPos.MutableBlockPos blockpos$mutable = new BlockPos.MutableBlockPos();
for (BlockPos blockpos : BlockPos.betweenClosed(pos.offset((double) (-f), -1.0D, (double) (-f)), pos.offset((double) f, -1.0D, (double) f))) {
if (blockpos.closerThan(living.position(), (double) f)) {
if (blockpos.closerToCenterThan(living.position(), (double) f)) {
blockpos$mutable.set(blockpos.getX(), blockpos.getY() + 1, blockpos.getZ());
BlockState blockstate1 = worldIn.getBlockState(blockpos$mutable);
if (blockstate1.isAir()) {

View File

@ -11,6 +11,7 @@ import io.izzel.arclight.common.mod.server.world.WrappedWorlds;
import io.izzel.arclight.common.mod.util.ArclightCaptures;
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
@ -94,11 +95,11 @@ public abstract class LevelMixin implements WorldBridge, LevelWriter {
private static BlockPos lastPhysicsProblem; // Spigot
public boolean preventPoiUpdated = false;
public void arclight$constructor(WritableLevelData worldInfo, ResourceKey<Level> dimension, final DimensionType dimensionType, Supplier<ProfilerFiller> profiler, boolean isRemote, boolean isDebug, long seed) {
public void arclight$constructor(WritableLevelData worldInfo, ResourceKey<Level> dimension, final Holder<DimensionType> dimensionType, Supplier<ProfilerFiller> profiler, boolean isRemote, boolean isDebug, long seed) {
throw new RuntimeException();
}
public void arclight$constructor(WritableLevelData worldInfo, ResourceKey<Level> dimension, final DimensionType dimensionType, Supplier<ProfilerFiller> profiler, boolean isRemote, boolean isDebug, long seed, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env) {
public void arclight$constructor(WritableLevelData worldInfo, ResourceKey<Level> dimension, final Holder<DimensionType> dimensionType, Supplier<ProfilerFiller> profiler, boolean isRemote, boolean isDebug, long seed, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env) {
arclight$constructor(worldInfo, dimension, dimensionType, profiler, isRemote, isDebug, seed);
this.generator = gen;
this.environment = env;
@ -106,8 +107,8 @@ public abstract class LevelMixin implements WorldBridge, LevelWriter {
bridge$getWorld();
}
@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) {
@Inject(method = "<init>(Lnet/minecraft/world/level/storage/WritableLevelData;Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/core/Holder;Ljava/util/function/Supplier;ZZJ)V", at = @At("RETURN"))
private void arclight$init(WritableLevelData info, ResourceKey<Level> dimension, Holder<DimensionType> dimType, Supplier<ProfilerFiller> profiler, boolean isRemote, boolean isDebug, long seed, CallbackInfo ci) {
((WorldBorderBridge) this.worldBorder).bridge$setWorld((Level) (Object) this);
for (SpawnCategory spawnCategory : SpawnCategory.values()) {
if (CraftSpawnCategory.isValidForLimits(spawnCategory)) {

View File

@ -7,7 +7,7 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.LootTable;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.bukkit.craftbukkit.v.event.CraftEventFactory;
import org.bukkit.craftbukkit.v.inventory.CraftItemStack;
import org.bukkit.event.world.LootGenerateEvent;

View File

@ -4,6 +4,7 @@ import io.izzel.arclight.common.bridge.core.world.IWorldWriterBridge;
import io.izzel.arclight.common.bridge.core.world.WorldBridge;
import io.izzel.arclight.common.bridge.core.world.spawner.WorldEntitySpawnerBridge;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Mob;
import net.minecraft.world.entity.MobCategory;
@ -90,7 +91,7 @@ public abstract class WorldEntitySpawnerMixin {
}
@Inject(method = "spawnMobsForChunkGeneration", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/level/ServerLevelAccessor;addFreshEntityWithPassengers(Lnet/minecraft/world/entity/Entity;)V"))
private static void arclight$worldGenSpawn(ServerLevelAccessor accessor, Biome p_151618_, ChunkPos p_151619_, Random p_151620_, CallbackInfo ci) {
private static void arclight$worldGenSpawn(ServerLevelAccessor accessor, Holder<Biome> p_151618_, ChunkPos p_151619_, Random p_151620_, CallbackInfo ci) {
((IWorldWriterBridge) accessor).bridge$pushAddEntityReason(CreatureSpawnEvent.SpawnReason.CHUNK_GEN);
}
}

View File

@ -7,7 +7,7 @@ import net.minecraft.nbt.NbtIo;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.storage.PlayerDataStorage;
import org.apache.logging.log4j.Logger;
import org.slf4j.Logger;
import org.bukkit.craftbukkit.v.entity.CraftPlayer;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -16,7 +16,6 @@ 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;
@ -207,10 +206,10 @@ public class BukkitRegistry {
ArclightMod.LOGGER.info("registry.villager-profession", newTypes.size());
}
public static void registerEnvironments(MappedRegistry<LevelStem> dimensions) {
public static void registerEnvironments(Registry<LevelStem> registry) {
int i = World.Environment.values().length;
List<World.Environment> newTypes = new ArrayList<>();
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : dimensions.entrySet()) {
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : registry.entrySet()) {
ResourceKey<LevelStem> key = entry.getKey();
World.Environment environment = DIM_MAP.get(key);
if (environment == null) {

View File

@ -1,3 +1,8 @@
# Arclight 1.18.2
public-f net.minecraft.server.ReloadableServerResources f_206847_ # commands
public net.minecraft.world.level.chunk.ChunkGenerator f_212255_
public net.minecraft.world.level.chunk.ChunkGenerator f_207956_
public net.minecraft.world.level.chunk.ChunkGenerator f_207955_
# Arclight 1.18
public net.minecraft.server.level.PlayerRespawnLogic m_183928_(Lnet/minecraft/server/level/ServerLevel;II)Lnet/minecraft/core/BlockPos;
public net.minecraft.world.entity.npc.Villager m_35524_()V # releaseAllPois

View File

@ -48,7 +48,7 @@
"network.rcon.RConConsoleSourceMixin",
"server.BootstrapMixin",
"server.CustomServerBossInfoMixin",
"server.MainMixin",
"server.WorldStemMixin",
"server.MinecraftServerMixin",
"server.PlayerAdvancementsMixin",
"server.ServerFunctionManagerMixin",

View File

@ -44,7 +44,7 @@ repositories {
def embedLibs = [/*"org.spongepowered:mixin:$mixinVersion", */ 'org.yaml:snakeyaml:1.30',
'org.xerial:sqlite-jdbc:3.36.0.3', 'mysql:mysql-connector-java:8.0.27',
/*'commons-lang:commons-lang:2.6',*/ 'com.googlecode.json-simple:json-simple:1.1.1',
'org.apache.logging.log4j:log4j-jul:2.15.0', 'net.md-5:SpecialSource:1.10.0',
'org.apache.logging.log4j:log4j-jul:2.17.0', 'net.md-5:SpecialSource:1.10.0',
'org.jline:jline-terminal-jansi:3.12.1', 'org.fusesource.jansi:jansi:1.18',
/*'org.jline:jline-terminal:3.12.1', 'org.jline:jline-reader:3.12.1',*/
'jline:jline:2.12.1', 'org.apache.maven:maven-resolver-provider:3.8.1',
@ -68,11 +68,11 @@ dependencies {
implementation 'cpw.mods:securejarhandler:0.9.45'
implementation 'net.minecraftforge:forgespi:4.0.9'
gson 'com.google.code.gson:gson:2.8.9'
implementation 'org.apache.logging.log4j:log4j-api:2.15.0'
implementation 'org.apache.logging.log4j:log4j-core:2.15.0'
implementation 'org.apache.logging.log4j:log4j-api:2.17.0'
implementation 'org.apache.logging.log4j:log4j-core:2.17.0'
implementation 'org.jetbrains:annotations:22.0.0'
implementation 'org.spongepowered:mixin:0.8.3'
implementation 'org.apache.logging.log4j:log4j-jul:2.15.0'
implementation 'org.apache.logging.log4j:log4j-jul:2.17.0'
for (def lib : embedLibs) {
installer lib
}

View File

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

View File

@ -1,6 +1,6 @@
allprojects {
group 'io.izzel.arclight'
version '1.0.1'
version '1.0.2-SNAPSHOT'
def getGitHash = { ->
def stdout = new ByteArrayOutputStream()
@ -13,9 +13,9 @@ allprojects {
ext {
agpVersion = '1.22'
minecraftVersion = '1.18.1'
forgeVersion = '39.1.2'
apiVersion = '1.2.5'
minecraftVersion = '1.18.2'
forgeVersion = '40.0.12'
apiVersion = '1.2.6'
toolsVersion = '1.3.+'
mixinVersion = '0.8.5'
gitHash = getGitHash()

View File

@ -59,7 +59,7 @@ public class ForgeInstaller {
private static final String INSTALLER_URL = "https://arclight.mcxk.net/net/minecraftforge/forge/%s-%s/forge-%s-%s-installer.jar";
private static final String SERVER_URL = "https://arclight.mcxk.net/net/minecraft/server/minecraft_server.%s.jar";
private static final Map<String, String> VERSION_HASH = Map.of(
"1.18.1", "125e5adf40c659fd3bce3e66e67a16bb49ecc1b9"
"1.18.2", "c8f83c5655308435b3dcf03c06d9fe8740a77469"
);
public static List<Path> modInstall(Consumer<String> logger) throws Throwable {