mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-28 03:19:14 +00:00
支持封装空物品
This commit is contained in:
@@ -8,6 +8,7 @@ import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
|
||||
import net.momirealms.craftengine.core.sound.SoundSource;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.world.BlockPos;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
@@ -17,7 +18,7 @@ public abstract class Player extends AbstractEntity implements NetWorkUser {
|
||||
|
||||
public abstract boolean isSecondaryUseActive();
|
||||
|
||||
@Nullable
|
||||
@NotNull
|
||||
public abstract Item<?> getItemInHand(InteractionHand hand);
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,11 @@ public class AbstractItem<W extends ItemWrapper<I>, I> implements Item<I> {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return this.factory.isEmpty(this.item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item<I> itemModel(String data) {
|
||||
this.factory.itemModel(this.item, data);
|
||||
|
||||
@@ -24,6 +24,8 @@ import java.util.Optional;
|
||||
*/
|
||||
public interface Item<I> {
|
||||
|
||||
boolean isEmpty();
|
||||
|
||||
Optional<CustomItem<I>> getCustomItem();
|
||||
|
||||
Optional<List<ItemBehavior>> getItemBehavior();
|
||||
|
||||
@@ -202,4 +202,6 @@ public abstract class ItemFactory<W extends ItemWrapper<I>, I> {
|
||||
protected abstract W transmuteCopy(W item, Key newItem, int amount);
|
||||
|
||||
protected abstract W unsafeTransmuteCopy(W item, Object newItem, int count);
|
||||
|
||||
protected abstract boolean isEmpty(W item);
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@ import net.momirealms.craftengine.core.registry.Holder;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.incendo.cloud.suggestion.Suggestion;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
@@ -36,14 +37,17 @@ public interface ItemManager<T> extends Manageable, ModelGenerator {
|
||||
|
||||
Collection<Key> vanillaItems();
|
||||
|
||||
@Nullable
|
||||
T buildCustomItemStack(Key id, @Nullable Player player);
|
||||
|
||||
@Nullable
|
||||
T buildItemStack(Key id, @Nullable Player player);
|
||||
|
||||
Item<T> createCustomWrappedItem(Key id, @Nullable Player player);
|
||||
|
||||
Item<T> createWrappedItem(Key id, @Nullable Player player);
|
||||
|
||||
@NotNull
|
||||
Item<T> wrap(T itemStack);
|
||||
|
||||
Item<T> fromByteArray(byte[] bytes);
|
||||
|
||||
@@ -8,6 +8,8 @@ import net.momirealms.craftengine.core.world.BlockHitResult;
|
||||
import net.momirealms.craftengine.core.world.BlockPos;
|
||||
import net.momirealms.craftengine.core.world.Vec3d;
|
||||
import net.momirealms.craftengine.core.world.World;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class UseOnContext {
|
||||
private final Player player;
|
||||
@@ -24,7 +26,7 @@ public class UseOnContext {
|
||||
this(player.world(), player, hand, stack, hit);
|
||||
}
|
||||
|
||||
public UseOnContext(World world, Player player, InteractionHand hand, Item<?> stack, BlockHitResult hit) {
|
||||
public UseOnContext(@NotNull World world, Player player, InteractionHand hand, @NotNull Item<?> stack, BlockHitResult hit) {
|
||||
this.player = player;
|
||||
this.hand = hand;
|
||||
this.hitResult = hit;
|
||||
@@ -52,6 +54,7 @@ public class UseOnContext {
|
||||
return this.hitResult.isInside();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Item<?> getItem() {
|
||||
return this.itemStack;
|
||||
}
|
||||
|
||||
@@ -4,5 +4,11 @@ public enum CraftingRecipeCategory {
|
||||
BUILDING,
|
||||
REDSTONE,
|
||||
EQUIPMENT,
|
||||
MISC
|
||||
MISC;
|
||||
|
||||
public static final CraftingRecipeCategory[] VALUES = CraftingRecipeCategory.values();
|
||||
|
||||
public static CraftingRecipeCategory byId(final int id) {
|
||||
return VALUES[id];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.legacy;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
@ApiStatus.Obsolete
|
||||
public class LegacyIngredient {
|
||||
private final Item<Object>[] items;
|
||||
|
||||
public LegacyIngredient(Item<Object>[] items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
public Item<?>[] items() {
|
||||
return items;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static LegacyIngredient read(FriendlyByteBuf buf) {
|
||||
Item<Object>[] items = buf.readArray(byteBuf -> CraftEngine.instance().itemManager().decode(byteBuf), Item.class);
|
||||
return new LegacyIngredient(items);
|
||||
}
|
||||
|
||||
public void applyClientboundData(Player player) {
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
Item<Object> item = items[i];
|
||||
this.items[i] = CraftEngine.instance().itemManager().s2c(item, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.legacy;
|
||||
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.function.Function;
|
||||
|
||||
@ApiStatus.Obsolete
|
||||
public interface LegacyRecipe {
|
||||
|
||||
void write(FriendlyByteBuf buf);
|
||||
|
||||
static LegacyRecipe read(FriendlyByteBuf buf) {
|
||||
if (VersionHelper.isOrAbove1_20_5()) {
|
||||
Key id = buf.readKey();
|
||||
Key type = buf.readKey();
|
||||
return BuiltInRegistries.LEGACY_RECIPE_TYPE.getValue(type).read(id, buf);
|
||||
} else {
|
||||
Key type = buf.readKey();
|
||||
Key id = buf.readKey();
|
||||
return BuiltInRegistries.LEGACY_RECIPE_TYPE.getValue(type).read(id, buf);
|
||||
}
|
||||
}
|
||||
|
||||
record Type(Function<FriendlyByteBuf, LegacyRecipe> reader) {
|
||||
|
||||
public LegacyRecipe read(Key id, FriendlyByteBuf buf) {
|
||||
return this.reader.apply(buf);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.legacy;
|
||||
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
@ApiStatus.Obsolete
|
||||
public final class LegacyRecipeTypes {
|
||||
private LegacyRecipeTypes() {}
|
||||
|
||||
public static final Key SHAPED_RECIPE = Key.of("crafting_shaped");
|
||||
public static final Key SHAPELESS_RECIPE = Key.of("crafting_shapeless");
|
||||
public static final Key ARMOR_DYE = Key.of("crafting_special_armordye");
|
||||
public static final Key BOOK_CLONING = Key.of("crafting_special_bookcloning");
|
||||
public static final Key MAP_CLONING = Key.of("crafting_special_mapcloning");
|
||||
public static final Key MAP_EXTENDING = Key.of("crafting_special_mapextending");
|
||||
public static final Key FIREWORK_ROCKET = Key.of("crafting_special_firework_rocket");
|
||||
public static final Key FIREWORK_STAR = Key.of("crafting_special_firework_star");
|
||||
public static final Key FIREWORK_STAR_FADE = Key.of("crafting_special_firework_star_fade");
|
||||
public static final Key TIPPED_ARROW = Key.of("crafting_special_tippedarrow");
|
||||
public static final Key BANNER_DUPLICATE = Key.of("crafting_special_bannerduplicate");
|
||||
public static final Key SHIELD_DECORATION = Key.of("crafting_special_shielddecoration");
|
||||
public static final Key SHULKER_BOX_COLORING = Key.of("crafting_special_shulkerboxcoloring");
|
||||
public static final Key SUSPICIOUS_STEW = Key.of("crafting_special_suspiciousstew");
|
||||
public static final Key REPAIR_ITEM = Key.of("crafting_special_repairitem");
|
||||
public static final Key SMELTING_RECIPE = Key.of("smelting");
|
||||
public static final Key BLASTING_RECIPE = Key.of("blasting");
|
||||
public static final Key SMOKING_RECIPE = Key.of("smoking");
|
||||
public static final Key CAMPFIRE_COOKING_RECIPE = Key.of("campfire_cooking");
|
||||
public static final Key STONECUTTER = Key.of("stonecutting");
|
||||
public static final Key SMITHING_TRANSFORM = Key.of("smithing_transform");
|
||||
public static final Key SMITHING_TRIM = Key.of("smithing_trim");
|
||||
public static final Key DECORATED_POT_RECIPE = Key.of("crafting_decorated_pot");
|
||||
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.legacy;
|
||||
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
import net.momirealms.craftengine.core.item.recipe.CraftingRecipeCategory;
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.VersionHelper;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
@ApiStatus.Obsolete
|
||||
public class LegacyShapedRecipe implements LegacyRecipe {
|
||||
private final int width;
|
||||
private final int height;
|
||||
private final List<LegacyIngredient> ingredients;
|
||||
private final Item<?> result;
|
||||
private final Key id;
|
||||
private final String group;
|
||||
private final CraftingRecipeCategory category;
|
||||
private final boolean showNotification;
|
||||
|
||||
public LegacyShapedRecipe(int width, int height, List<LegacyIngredient> ingredients, Item<?> result, Key id, String group, CraftingRecipeCategory category, boolean showNotification) {
|
||||
this.category = category;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.ingredients = ingredients;
|
||||
this.result = result;
|
||||
this.id = id;
|
||||
this.group = group;
|
||||
this.showNotification = showNotification;
|
||||
}
|
||||
|
||||
private static final BiFunction<Key, FriendlyByteBuf, LegacyShapedRecipe> READER = VersionHelper.isOrAbove1_20_3() ?
|
||||
(id, buf) -> {
|
||||
String group = buf.readUtf();
|
||||
int category = buf.readVarInt();
|
||||
int width = buf.readVarInt();
|
||||
int height = buf.readVarInt();
|
||||
int size = width * height;
|
||||
List<LegacyIngredient> ingredients = new ArrayList<>(size);
|
||||
for (int i = 0; i < size; i++) {
|
||||
ingredients.set(i, LegacyIngredient.read(buf));
|
||||
}
|
||||
Item<?> result = CraftEngine.instance().itemManager().decode(buf);
|
||||
boolean flag = buf.readBoolean();
|
||||
return new LegacyShapedRecipe(width, height, ingredients, result, id, group, CraftingRecipeCategory.byId(category), flag);
|
||||
} :
|
||||
(id, buf) -> {
|
||||
int width = buf.readVarInt();
|
||||
int height = buf.readVarInt();
|
||||
String group = buf.readUtf();
|
||||
int category = buf.readVarInt();
|
||||
int size = width * height;
|
||||
List<LegacyIngredient> ingredients = new ArrayList<>(size);
|
||||
for (int i = 0; i < size; i++) {
|
||||
ingredients.set(i, LegacyIngredient.read(buf));
|
||||
}
|
||||
Item<?> result = CraftEngine.instance().itemManager().decode(buf);
|
||||
boolean flag = buf.readBoolean();
|
||||
return new LegacyShapedRecipe(width, height, ingredients, result, id, group, CraftingRecipeCategory.byId(category), flag);
|
||||
};
|
||||
|
||||
public static LegacyShapedRecipe read(Key id, FriendlyByteBuf buf) {
|
||||
return READER.apply(id, buf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(FriendlyByteBuf buf) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern;
|
||||
|
||||
import com.mojang.datafixers.util.Either;
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.RecipeDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplay;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern;
|
||||
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
import net.momirealms.craftengine.core.registry.Holder;
|
||||
@@ -8,6 +8,8 @@ import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.ResourceKey;
|
||||
|
||||
public final class RecipeDisplays {
|
||||
private RecipeDisplays() {}
|
||||
|
||||
public static final Key CRAFTING_SHAPELESS = Key.of("crafting_shapeless");
|
||||
public static final Key CRAFTING_SHAPED = Key.of("crafting_shaped");
|
||||
public static final Key FURNACE = Key.of("furnace");
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.entity.player.Player;
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
|
||||
import net.momirealms.craftengine.core.registry.Holder;
|
||||
@@ -8,6 +8,8 @@ import net.momirealms.craftengine.core.util.Key;
|
||||
import net.momirealms.craftengine.core.util.ResourceKey;
|
||||
|
||||
public final class SlotDisplays {
|
||||
private SlotDisplays() {}
|
||||
|
||||
public static final Key EMPTY = Key.of("empty");
|
||||
public static final Key ANY_FUEL = Key.of("any_fuel");
|
||||
public static final Key ITEM = Key.of("item");
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import com.mojang.datafixers.util.Either;
|
||||
import net.kyori.adventure.text.Component;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
import net.momirealms.craftengine.core.util.Key;
|
||||
@@ -1,4 +1,4 @@
|
||||
package net.momirealms.craftengine.core.item.recipe.network.display.slot;
|
||||
package net.momirealms.craftengine.core.item.recipe.network.modern.display.slot;
|
||||
|
||||
import net.momirealms.craftengine.core.util.FriendlyByteBuf;
|
||||
|
||||
@@ -7,8 +7,8 @@ import net.momirealms.craftengine.core.entity.projectile.ProjectileManager;
|
||||
import net.momirealms.craftengine.core.font.FontManager;
|
||||
import net.momirealms.craftengine.core.item.ItemManager;
|
||||
import net.momirealms.craftengine.core.item.recipe.RecipeManager;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.RecipeDisplays;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplays;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplays;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplays;
|
||||
import net.momirealms.craftengine.core.loot.VanillaLootManager;
|
||||
import net.momirealms.craftengine.core.pack.PackManager;
|
||||
import net.momirealms.craftengine.core.plugin.classpath.ClassPathAppender;
|
||||
|
||||
@@ -8,8 +8,9 @@ import net.momirealms.craftengine.core.item.behavior.ItemBehaviorFactory;
|
||||
import net.momirealms.craftengine.core.item.equipment.EquipmentFactory;
|
||||
import net.momirealms.craftengine.core.item.recipe.CustomSmithingTransformRecipe;
|
||||
import net.momirealms.craftengine.core.item.recipe.RecipeFactory;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.RecipeDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.legacy.LegacyRecipe;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.loot.LootContext;
|
||||
import net.momirealms.craftengine.core.loot.entry.LootEntryContainerFactory;
|
||||
import net.momirealms.craftengine.core.loot.function.ApplyBonusCountFunction;
|
||||
@@ -74,6 +75,7 @@ public class BuiltInRegistries {
|
||||
public static final Registry<EquipmentFactory> EQUIPMENT_FACTORY = createRegistry(Registries.EQUIPMENT_FACTORY);
|
||||
public static final Registry<SlotDisplay.Type> SLOT_DISPLAY_TYPE = createRegistry(Registries.SLOT_DISPLAY_TYPE);
|
||||
public static final Registry<RecipeDisplay.Type> RECIPE_DISPLAY_TYPE = createRegistry(Registries.RECIPE_DISPLAY_TYPE);
|
||||
public static final Registry<LegacyRecipe.Type> LEGACY_RECIPE_TYPE = createRegistry(Registries.LEGACY_RECIPE_TYPE);
|
||||
|
||||
private static <T> Registry<T> createRegistry(ResourceKey<? extends Registry<T>> key) {
|
||||
return new MappedRegistry<>(key);
|
||||
|
||||
@@ -8,8 +8,9 @@ import net.momirealms.craftengine.core.item.behavior.ItemBehaviorFactory;
|
||||
import net.momirealms.craftengine.core.item.equipment.EquipmentFactory;
|
||||
import net.momirealms.craftengine.core.item.recipe.CustomSmithingTransformRecipe;
|
||||
import net.momirealms.craftengine.core.item.recipe.RecipeFactory;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.RecipeDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.legacy.LegacyRecipe;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.RecipeDisplay;
|
||||
import net.momirealms.craftengine.core.item.recipe.network.modern.display.slot.SlotDisplay;
|
||||
import net.momirealms.craftengine.core.loot.LootContext;
|
||||
import net.momirealms.craftengine.core.loot.entry.LootEntryContainerFactory;
|
||||
import net.momirealms.craftengine.core.loot.function.ApplyBonusCountFunction;
|
||||
@@ -75,4 +76,5 @@ public class Registries {
|
||||
public static final ResourceKey<Registry<EquipmentFactory>> EQUIPMENT_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("equipment_factory"));
|
||||
public static final ResourceKey<Registry<SlotDisplay.Type>> SLOT_DISPLAY_TYPE = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("slot_display_type"));
|
||||
public static final ResourceKey<Registry<RecipeDisplay.Type>> RECIPE_DISPLAY_TYPE = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("recipe_display_type"));
|
||||
public static final ResourceKey<Registry<LegacyRecipe.Type>> LEGACY_RECIPE_TYPE = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("legacy_recipe_type"));
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Array;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.nio.channels.FileChannel;
|
||||
@@ -48,20 +49,34 @@ public class FriendlyByteBuf extends ByteBuf {
|
||||
|
||||
public <T, C extends Collection<T>> C readCollection(IntFunction<C> collectionFactory, Reader<T> reader) {
|
||||
int i = this.readVarInt();
|
||||
C c0 = (C)(collectionFactory.apply(i));
|
||||
|
||||
C collection = collectionFactory.apply(i);
|
||||
for(int j = 0; j < i; ++j) {
|
||||
c0.add(reader.apply(this));
|
||||
collection.add(reader.apply(this));
|
||||
}
|
||||
|
||||
return c0;
|
||||
return collection;
|
||||
}
|
||||
|
||||
public <T> void writeCollection(Collection<T> collection, Writer<T> writer) {
|
||||
this.writeVarInt(collection.size());
|
||||
for (T t : collection) {
|
||||
writer.accept(this, t);
|
||||
}
|
||||
}
|
||||
|
||||
for (T t0 : collection) {
|
||||
writer.accept(this, t0);
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T[] readArray(Reader<T> reader, Class<T> type) {
|
||||
int i = this.readVarInt();
|
||||
T[] array = (T[]) Array.newInstance(type, i);
|
||||
for(int j = 0; j < i; ++j) {
|
||||
array[j] = reader.apply(this);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
public <T> void writeArray(T[] array, Writer<T> writer) {
|
||||
this.writeVarInt(array.length);
|
||||
for(T t : array) {
|
||||
writer.accept(this, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package net.momirealms.craftengine.core.util;
|
||||
|
||||
import net.momirealms.craftengine.core.item.Item;
|
||||
|
||||
public final class ItemUtils {
|
||||
private ItemUtils() {
|
||||
}
|
||||
|
||||
public static boolean isEmpty(Item<?> item) {
|
||||
return item == null || item.isEmpty();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user