parent
e2655bbd39
commit
c5a43fd480
|
@ -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) |
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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);
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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()) {
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -48,7 +48,7 @@
|
|||
"network.rcon.RConConsoleSourceMixin",
|
||||
"server.BootstrapMixin",
|
||||
"server.CustomServerBossInfoMixin",
|
||||
"server.MainMixin",
|
||||
"server.WorldStemMixin",
|
||||
"server.MinecraftServerMixin",
|
||||
"server.PlayerAdvancementsMixin",
|
||||
"server.ServerFunctionManagerMixin",
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue
Block a user