Fix several missing method.
This commit is contained in:
parent
1ed82a216c
commit
b6ffece228
@ -1,6 +1,7 @@
|
||||
package io.izzel.arclight.common.bridge.world.server;
|
||||
|
||||
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
||||
import net.minecraft.world.server.ChunkHolder;
|
||||
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
@ -9,4 +10,6 @@ public interface ChunkManagerBridge {
|
||||
void bridge$tick(BooleanSupplier hasMoreTime);
|
||||
|
||||
ArclightCallbackExecutor bridge$getCallbackExecutor();
|
||||
|
||||
ChunkHolder bridge$chunkHolderAt(long chunkPos);
|
||||
}
|
||||
|
||||
@ -12,5 +12,7 @@ public interface ServerChunkProviderBridge {
|
||||
|
||||
boolean bridge$tickDistanceManager();
|
||||
|
||||
boolean bridge$isChunkLoaded(int x, int z);
|
||||
|
||||
ServerWorldLightManager bridge$getLightManager();
|
||||
}
|
||||
|
||||
@ -1,17 +1,21 @@
|
||||
package io.izzel.arclight.common.mixin.core.world.server;
|
||||
|
||||
import io.izzel.arclight.common.bridge.world.server.ChunkManagerBridge;
|
||||
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
||||
import net.minecraft.world.server.ChunkHolder;
|
||||
import net.minecraft.world.server.ChunkManager;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
@Mixin(ChunkManager.class)
|
||||
public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
||||
|
||||
// @formatter:off
|
||||
@Shadow @Nullable protected abstract ChunkHolder func_219220_a(long chunkPosIn);
|
||||
@Invoker("tick") public abstract void bridge$tick(BooleanSupplier hasMoreTime);
|
||||
// @formatter:on
|
||||
|
||||
@ -21,4 +25,9 @@ public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
||||
public ArclightCallbackExecutor bridge$getCallbackExecutor() {
|
||||
return this.callbackExecutor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChunkHolder bridge$chunkHolderAt(long chunkPos) {
|
||||
return func_219220_a(chunkPos);
|
||||
}
|
||||
}
|
||||
|
||||
@ -46,6 +46,16 @@ public abstract class ServerChunkProviderMixin implements ServerChunkProviderBri
|
||||
@Accessor("lightManager") public abstract ServerWorldLightManager bridge$getLightManager();
|
||||
// @formatter:on
|
||||
|
||||
public boolean isChunkLoaded(final int chunkX, final int chunkZ) {
|
||||
final ChunkHolder chunk = ((ChunkManagerBridge) this.chunkManager).bridge$chunkHolderAt(ChunkPos.asLong(chunkX, chunkZ));
|
||||
return chunk != null && ((ChunkHolderBridge) chunk).bridge$getFullChunk() != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean bridge$isChunkLoaded(int x, int z) {
|
||||
return isChunkLoaded(x, z);
|
||||
}
|
||||
|
||||
/**
|
||||
* @author IzzelAliz
|
||||
* @reason
|
||||
|
||||
@ -5,13 +5,17 @@ import net.minecraft.item.crafting.IRecipe;
|
||||
import net.minecraft.item.crafting.Ingredient;
|
||||
import net.minecraft.item.crafting.SpecialRecipe;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Keyed;
|
||||
import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.craftbukkit.v.CraftServer;
|
||||
import org.bukkit.craftbukkit.v.inventory.CraftItemStack;
|
||||
import org.bukkit.craftbukkit.v.inventory.CraftRecipe;
|
||||
import org.bukkit.craftbukkit.v.inventory.CraftShapedRecipe;
|
||||
import org.bukkit.craftbukkit.v.inventory.CraftShapelessRecipe;
|
||||
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.RecipeChoice;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class ArclightSpecialRecipe {
|
||||
|
||||
@ -49,7 +53,35 @@ public class ArclightSpecialRecipe {
|
||||
}
|
||||
}
|
||||
|
||||
public static CraftShapelessRecipe shapeless(ItemStack result, IRecipe<?> recipe, Ingredient... ingredients) {
|
||||
public static class Dynamic implements CraftRecipe, Keyed {
|
||||
|
||||
private final IRecipe<?> recipe;
|
||||
|
||||
public Dynamic(IRecipe<?> recipe) {
|
||||
this.recipe = recipe;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToCraftingManager() {
|
||||
((RecipeManagerBridge) ((CraftServer) Bukkit.getServer()).getServer().getRecipeManager()).bridge$addRecipe(this.recipe);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull ItemStack getResult() {
|
||||
return CraftItemStack.asCraftMirror(this.recipe.getRecipeOutput());
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public NamespacedKey getKey() {
|
||||
return CraftNamespacedKey.fromMinecraft(this.recipe.getId());
|
||||
}
|
||||
}
|
||||
|
||||
public static CraftRecipe shapeless(ItemStack result, IRecipe<?> recipe, Ingredient... ingredients) {
|
||||
if (recipe.getRecipeOutput().isEmpty()) {
|
||||
return new Dynamic(recipe);
|
||||
}
|
||||
Shapeless shapeless = new Shapeless(result, recipe);
|
||||
for (Ingredient ingredient : ingredients) {
|
||||
shapeless.addIngredient(CraftRecipe.toBukkit(ingredient));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user