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;
|
package io.izzel.arclight.common.bridge.world.server;
|
||||||
|
|
||||||
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
||||||
|
import net.minecraft.world.server.ChunkHolder;
|
||||||
|
|
||||||
import java.util.function.BooleanSupplier;
|
import java.util.function.BooleanSupplier;
|
||||||
|
|
||||||
@ -9,4 +10,6 @@ public interface ChunkManagerBridge {
|
|||||||
void bridge$tick(BooleanSupplier hasMoreTime);
|
void bridge$tick(BooleanSupplier hasMoreTime);
|
||||||
|
|
||||||
ArclightCallbackExecutor bridge$getCallbackExecutor();
|
ArclightCallbackExecutor bridge$getCallbackExecutor();
|
||||||
|
|
||||||
|
ChunkHolder bridge$chunkHolderAt(long chunkPos);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,5 +12,7 @@ public interface ServerChunkProviderBridge {
|
|||||||
|
|
||||||
boolean bridge$tickDistanceManager();
|
boolean bridge$tickDistanceManager();
|
||||||
|
|
||||||
|
boolean bridge$isChunkLoaded(int x, int z);
|
||||||
|
|
||||||
ServerWorldLightManager bridge$getLightManager();
|
ServerWorldLightManager bridge$getLightManager();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,17 +1,21 @@
|
|||||||
package io.izzel.arclight.common.mixin.core.world.server;
|
package io.izzel.arclight.common.mixin.core.world.server;
|
||||||
|
|
||||||
import io.izzel.arclight.common.bridge.world.server.ChunkManagerBridge;
|
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 net.minecraft.world.server.ChunkManager;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.gen.Invoker;
|
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||||
import io.izzel.arclight.common.mod.util.ArclightCallbackExecutor;
|
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.function.BooleanSupplier;
|
import java.util.function.BooleanSupplier;
|
||||||
|
|
||||||
@Mixin(ChunkManager.class)
|
@Mixin(ChunkManager.class)
|
||||||
public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
||||||
|
|
||||||
// @formatter:off
|
// @formatter:off
|
||||||
|
@Shadow @Nullable protected abstract ChunkHolder func_219220_a(long chunkPosIn);
|
||||||
@Invoker("tick") public abstract void bridge$tick(BooleanSupplier hasMoreTime);
|
@Invoker("tick") public abstract void bridge$tick(BooleanSupplier hasMoreTime);
|
||||||
// @formatter:on
|
// @formatter:on
|
||||||
|
|
||||||
@ -21,4 +25,9 @@ public abstract class ChunkManagerMixin implements ChunkManagerBridge {
|
|||||||
public ArclightCallbackExecutor bridge$getCallbackExecutor() {
|
public ArclightCallbackExecutor bridge$getCallbackExecutor() {
|
||||||
return this.callbackExecutor;
|
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();
|
@Accessor("lightManager") public abstract ServerWorldLightManager bridge$getLightManager();
|
||||||
// @formatter:on
|
// @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
|
* @author IzzelAliz
|
||||||
* @reason
|
* @reason
|
||||||
|
|||||||
@ -5,13 +5,17 @@ import net.minecraft.item.crafting.IRecipe;
|
|||||||
import net.minecraft.item.crafting.Ingredient;
|
import net.minecraft.item.crafting.Ingredient;
|
||||||
import net.minecraft.item.crafting.SpecialRecipe;
|
import net.minecraft.item.crafting.SpecialRecipe;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Keyed;
|
||||||
|
import org.bukkit.NamespacedKey;
|
||||||
import org.bukkit.craftbukkit.v.CraftServer;
|
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.CraftRecipe;
|
||||||
import org.bukkit.craftbukkit.v.inventory.CraftShapedRecipe;
|
import org.bukkit.craftbukkit.v.inventory.CraftShapedRecipe;
|
||||||
import org.bukkit.craftbukkit.v.inventory.CraftShapelessRecipe;
|
import org.bukkit.craftbukkit.v.inventory.CraftShapelessRecipe;
|
||||||
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
import org.bukkit.craftbukkit.v.util.CraftNamespacedKey;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.RecipeChoice;
|
import org.bukkit.inventory.RecipeChoice;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class ArclightSpecialRecipe {
|
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);
|
Shapeless shapeless = new Shapeless(result, recipe);
|
||||||
for (Ingredient ingredient : ingredients) {
|
for (Ingredient ingredient : ingredients) {
|
||||||
shapeless.addIngredient(CraftRecipe.toBukkit(ingredient));
|
shapeless.addIngredient(CraftRecipe.toBukkit(ingredient));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user