Skip to content

Commit

Permalink
试图迁移到neoforge only
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhuRuoLing committed Sep 7, 2024
1 parent 47f6424 commit c40ae84
Show file tree
Hide file tree
Showing 71 changed files with 530 additions and 1,694 deletions.
12 changes: 12 additions & 0 deletions src/main/java/dev/anvilcraft/lib/event/SubscribeEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.anvilcraft.lib.event;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SubscribeEvent {
}

28 changes: 22 additions & 6 deletions src/main/java/dev/dubhe/anvilcraft/AnvilCraft.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import dev.anvilcraft.lib.event.EventManager;
import dev.anvilcraft.lib.event.SubscribeEvent;
import dev.dubhe.anvilcraft.api.registry.AnvilCraftRegistrate;
import dev.dubhe.anvilcraft.config.AnvilCraftConfig;
import dev.dubhe.anvilcraft.data.generator.AnvilCraftDatagen;
Expand All @@ -23,6 +23,8 @@
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.bus.api.BusBuilder;
import net.neoforged.bus.api.IEventBus;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -32,10 +34,22 @@ public class AnvilCraft {
public static final String MOD_NAME = "AnvilCraft";
public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_NAME);
public static final EventManager EVENT_BUS = new EventManager();
public static final IEventBus EVENT_BUS = BusBuilder.builder()
.checkTypesOnDispatch()
.markerType(SubscribeEvent.class)
.setExceptionHandler((bus, event, listeners, index, throwable) -> LOGGER.error(
"An exception was thrown from {} while dispatching event {} on {}",
listeners[index],
event,
bus,
throwable
))
.build();

public static AnvilCraftConfig config = AutoConfig
.register(AnvilCraftConfig.class, JanksonConfigSerializer::new)
.getConfig();
.register(AnvilCraftConfig.class, JanksonConfigSerializer::new)
.getConfig();
public static IEventBus MOD_EVENT_BUS;
// EnchantmentDisable
public static final Lazy<EnchantmentDisableUtil> enchantmentDisableUtil = new Lazy<>(EnchantmentDisableUtil::new);

Expand All @@ -44,7 +58,8 @@ public class AnvilCraft {
/**
* 初始化函数
*/
public static void init() {
public static void init(IEventBus bus) {
MOD_EVENT_BUS = bus;
// common
ModEvents.register();
ModBlocks.register();
Expand All @@ -62,7 +77,8 @@ public static void init() {
// datagen
AnvilCraftDatagen.init();
// fabric 独有,请在此之前插入注册
REGISTRATE.registerRegistrate();
// 现在没有了
REGISTRATE.registerRegistrate(bus);
}

public static @NotNull ResourceLocation of(String path) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private void doRipen(
if (state.getBlock() instanceof BonemealableBlock growable
&& !(growable instanceof GrassBlock)
&& !(growable instanceof NyliumBlock)
&& growable.isValidBonemealTarget(level, pos1, state, false)
&& growable.isValidBonemealTarget(level, pos1, state)
&& level.getBrightness(LightLayer.BLOCK, pos1) >= 10
) {
growable.performBonemeal((ServerLevel) level, level.getRandom(), pos1, state);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
package dev.dubhe.anvilcraft.api.depository;

import dev.architectury.injectables.annotations.ExpectPlatform;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.vehicle.ContainerEntity;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.phys.AABB;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.items.IItemHandler;
import net.neoforged.neoforge.items.IItemHandlerModifiable;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.annotation.Nonnull;
import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;

public class ItemDepositoryHelper {
Expand All @@ -26,9 +34,26 @@ private ItemDepositoryHelper() {
* @param direction 输入方向
* @return 物品存储
*/
@ExpectPlatform
public static @Nullable IItemDepository getItemDepository(Level level, BlockPos pos, Direction direction) {
throw new AssertionError();
IItemDepository depository = ItemDepositoryHelper.getItemDepositoryFromHolder(level, pos);
if (depository != null) return depository;
BlockEntity be = level.getBlockEntity(pos);
if (be != null) {
IItemHandler handler = level.getCapability(Capabilities.ItemHandler.BLOCK, pos, direction.getOpposite());
if (handler != null) {
return toItemDepository(handler);
}
}
List<IItemHandler> itemHandlers = level
.getEntitiesOfClass(Entity.class, new AABB(pos))
.stream()
.filter(entity -> entity instanceof ContainerEntity)
.map(entity -> entity.getCapability(Capabilities.ItemHandler.ENTITY, null))
.filter(Objects::nonNull)
.toList();
if (itemHandlers.isEmpty()) return null;
IItemHandler handler = itemHandlers.get(level.getRandom().nextInt(0, itemHandlers.size()));
return toItemDepository(handler);
}

/**
Expand All @@ -53,10 +78,10 @@ private ItemDepositoryHelper() {
*/
@SuppressWarnings("DuplicatedCode")
public static boolean exportToTarget(
@NotNull IItemDepository source,
int maxAmount,
Predicate<ItemStack> predicate,
IItemDepository target
@NotNull IItemDepository source,
int maxAmount,
Predicate<ItemStack> predicate,
IItemDepository target
) {
boolean hasDone = false;
for (int srcIndex = 0; srcIndex < source.getSlots(); srcIndex++) {
Expand Down Expand Up @@ -100,7 +125,7 @@ private static boolean canInsert(ItemStack sourceStack, IItemDepository target)
if (targetStack.getCount() >= targetStack.getMaxStackSize()) {
continue;
}
if (ItemStack.isSameItemSameTags(sourceStack, targetStack)) {
if (ItemStack.isSameItemSameComponents(sourceStack, targetStack)) {
return true;
}
}
Expand All @@ -118,10 +143,10 @@ private static boolean canInsert(ItemStack sourceStack, IItemDepository target)
*/
@SuppressWarnings("DuplicatedCode")
public static boolean importToTarget(
IItemDepository target,
int maxAmount,
Predicate<ItemStack> predicate,
@NotNull IItemDepository source
IItemDepository target,
int maxAmount,
Predicate<ItemStack> predicate,
@NotNull IItemDepository source
) {
boolean hasDone = false;
for (int srcIndex = 0; srcIndex < source.getSlots(); srcIndex++) {
Expand Down Expand Up @@ -221,10 +246,10 @@ public static boolean canItemStackMerge(@Nonnull ItemStack a, @Nonnull ItemStack
if (!a.isStackable())
return false;

if (a.hasTag() != b.hasTag())
if (a.getComponents().isEmpty() != b.getComponents().isEmpty())
return false;

return (!a.hasTag() || a.getOrCreateTag().equals(b.getTag()));
return (!a.getComponents().isEmpty() || a.getComponents().equals(b.getComponents()));
}

/**
Expand All @@ -243,4 +268,90 @@ public static ItemStack copyStackWithSize(ItemStack stack, int size) {
return copy;
}
}

/**
* 将 {@link IItemHandler} 转换为 {@link IItemDepository}
*
* @param handler 要转换的 ItemHandler
* @return 转换为的 ItemDepository
*/
public static @NotNull IItemDepository toItemDepository(IItemHandler handler) {
return new IItemDepository() {
@Override
public int getSlots() {
return handler.getSlots();
}

@Override
public ItemStack getStack(int slot) {
return handler.getStackInSlot(slot);
}

@Override
public void setStack(int slot, ItemStack stack) {
((IItemHandlerModifiable) handler).setStackInSlot(slot, stack);
}

@Override
public ItemStack insert(
int slot, ItemStack stack, boolean simulate, boolean notifyChanges, boolean isServer
) {
return handler.insertItem(slot, stack, simulate);
}

@Override
public ItemStack extract(int slot, int amount, boolean simulate, boolean notifyChanges) {
return handler.extractItem(slot, amount, simulate);
}

@Override
public int getSlotLimit(int slot) {
return handler.getSlotLimit(slot);
}

@Override
public boolean isItemValid(int slot, ItemStack stack) {
return handler.isItemValid(slot, stack);
}
};
}

/**
* @param depository 物品容器
* @return 物品容器
*/
public static @NotNull IItemHandler toItemHandler(IItemDepository depository) {
return new IItemHandler() {

@Override
public int getSlots() {
return depository.getSlots();
}

@Override
public @NotNull ItemStack getStackInSlot(int i) {
return depository.getStack(i);
}

@Override
public @NotNull ItemStack insertItem(int i, @NotNull ItemStack arg, boolean bl) {
return depository.insert(i, arg, bl);
}

@Override
public @NotNull ItemStack extractItem(int i, int j, boolean bl) {
return depository.extract(i, j, bl);
}

@Override
public int getSlotLimit(int i) {
return depository.getSlotLimit(i);
}

@Override
public boolean isItemValid(int i, @NotNull ItemStack arg) {
return depository.isItemValid(i, arg);
}
};
}
}
Loading

0 comments on commit c40ae84

Please sign in to comment.