Skip to content

Commit

Permalink
IT COMPILES???
Browse files Browse the repository at this point in the history
  • Loading branch information
Ellpeck committed Mar 12, 2024
1 parent f2547e6 commit f7f425d
Show file tree
Hide file tree
Showing 21 changed files with 178 additions and 266 deletions.
34 changes: 12 additions & 22 deletions src/main/java/de/ellpeck/naturesaura/Helper.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package de.ellpeck.naturesaura;

import com.mojang.blaze3d.vertex.VertexConsumer;
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge;
import de.ellpeck.naturesaura.api.misc.ILevelData;
Expand All @@ -14,7 +13,6 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
Expand Down Expand Up @@ -45,13 +43,12 @@
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.neoforge.capabilities.Capabilities;
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
import net.neoforged.neoforge.items.IItemHandler;
import net.neoforged.neoforge.items.IItemHandlerModifiable;
import top.theillusivec4.curios.api.CuriosApi;
import top.theillusivec4.curios.api.SlotResult;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -200,21 +197,11 @@ public static InteractionResult putStackOnTile(Player player, InteractionHand ha
return InteractionResult.CONSUME;
}

public static ICapabilityProvider makeRechargeProvider(ItemStack stack, boolean needsSelected) {
return new ICapabilityProvider() {
private final LazyOptional<IAuraRecharge> recharge = LazyOptional.of(() -> (container, containerSlot, itemSlot, isSelected) -> {
if (isSelected || !needsSelected)
return Helper.rechargeAuraItem(stack, container, 300);
return false;
});

@Nullable
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
if (capability == NaturesAuraAPI.CAP_AURA_RECHARGE)
return this.recharge.cast();
return LazyOptional.empty();
}
public static ICapabilityProvider<ItemStack, Void, IAuraRecharge> makeRechargeProvider(boolean needsSelected) {
return (stack, ctx) -> (container, containerSlot, itemSlot, isSelected) -> {
if (isSelected || !needsSelected)
return Helper.rechargeAuraItem(stack, container, 300);
return false;
};
}

Expand Down Expand Up @@ -313,9 +300,12 @@ public static <T> void populateObjectHolders(Class<?> clazz, Registry<T> registr

public static ItemStack getEquippedItem(Predicate<ItemStack> predicate, Player player, boolean hotbarOnly) {
if (Compat.hasCompat("curios")) {
var stack = CuriosApi.getCuriosHelper().findFirstCurio(player, predicate).map(SlotResult::stack);
if (stack.isPresent())
return stack.get();
var inventory = CuriosApi.getCuriosInventory(player);
if (inventory.isPresent()) {
var stack = inventory.get().findFirstCurio(predicate).map(SlotResult::stack);
if (stack.isPresent())
return stack.get();
}
}
var invSize = hotbarOnly ? 9 : player.getInventory().getContainerSize();
for (var i = 0; i < invSize; i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,12 @@
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.level.SaplingGrowTreeEvent;
import net.neoforged.bus.api.SubscribeEvent;
import org.apache.commons.lang3.mutable.MutableObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class BlockWoodStand extends BlockContainerImpl implements ITESRProvider<BlockEntityWoodStand>, ICustomBlockState {
Expand Down Expand Up @@ -89,7 +88,7 @@ public void onTreeGrow(SaplingGrowTreeEvent event) {
});

if (fine && required.isEmpty()) {
toPick.getValue().setRitual(pos, recipe.value());
toPick.getValue().setRitual(pos, recipe);
break;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.neoforge.capabilities.Capabilities;

public class RenderAuraTimer implements BlockEntityRenderer<BlockEntityAuraTimer> {

Expand All @@ -27,7 +28,7 @@ public RenderAuraTimer(BlockEntityRendererProvider.Context context) {

@Override
public void render(BlockEntityAuraTimer tile, float partialTicks, PoseStack stack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn) {
var bottle = tile.getItemHandler().getStackInSlot(0);
var bottle = tile.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, tile.getBlockPos(), tile.getBlockState(), tile, null).getStackInSlot(0);
if (bottle.isEmpty())
return;
stack.pushPose();
Expand Down Expand Up @@ -61,5 +62,7 @@ public AuraModel() {
public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) {
this.model.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, red, green, blue, alpha);
}

}

}
13 changes: 12 additions & 1 deletion src/main/java/de/ellpeck/naturesaura/compat/Compat.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import de.ellpeck.naturesaura.data.ItemTagProvider;
import net.neoforged.fml.ModList;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import net.neoforged.neoforge.data.event.GatherDataEvent;

import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -34,12 +36,20 @@ public static boolean hasCompat(String mod) {
return Compat.MODULES.containsKey(mod);
}

public static void addItemTags(ItemTagProvider provider) {
public static void gatherData(GatherDataEvent event) {
// since other mods don't get loaded in runData, just populate all modules
Compat.populateModules(s -> true);
Compat.MODULES.values().forEach(m -> m.gatherData(event));
}

public static void addItemTags(ItemTagProvider provider) {
Compat.MODULES.values().forEach(m -> m.addItemTags(provider));
}

public static void addCapabilities(RegisterCapabilitiesEvent event) {
Compat.MODULES.values().forEach(c -> c.addCapabilities(event));
}

private static void populateModules(Predicate<String> isLoaded) {
for (var entry : Compat.MODULE_TYPES.entrySet()) {
var id = entry.getKey();
Expand All @@ -49,4 +59,5 @@ private static void populateModules(Predicate<String> isLoaded) {
}
}
}

}
102 changes: 46 additions & 56 deletions src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,22 @@
import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.data.ItemTagProvider;
import de.ellpeck.naturesaura.items.ModItems;
import net.minecraft.core.Direction;
import net.minecraft.core.HolderLookup;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.ItemTags;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.common.capabilities.Capability;
import net.neoforged.fml.InterModComms;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent;
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
import net.neoforged.neoforge.common.capabilities.ICapabilityProvider;
import net.neoforged.neoforge.common.util.LazyOptional;
import net.neoforged.neoforge.event.AttachCapabilitiesEvent;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import top.theillusivec4.curios.api.CuriosCapability;
import top.theillusivec4.curios.api.CuriosDataProvider;
import top.theillusivec4.curios.api.SlotContext;
import top.theillusivec4.curios.api.SlotTypeMessage;
import top.theillusivec4.curios.api.type.capability.ICurio;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

public class CuriosCompat implements ICompat {

Expand All @@ -39,62 +33,58 @@ public class CuriosCompat implements ICompat {
.build();

@Override
public void setup(FMLCommonSetupEvent event) {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::sendImc);
NeoForge.EVENT_BUS.addGenericListener(ItemStack.class, this::onCapabilitiesAttach);
}

@Override
public void setupClient() {

}

private void sendImc(InterModEnqueueEvent event) {
CuriosCompat.TYPES.values().stream().distinct().forEach(t -> InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder(t).build()));
}

private void onCapabilitiesAttach(AttachCapabilitiesEvent<ItemStack> event) {
var stack = event.getObject();
if (CuriosCompat.TYPES.containsKey(stack.getItem())) {
event.addCapability(new ResourceLocation(NaturesAura.MOD_ID, "curios"), new ICapabilityProvider() {
private final LazyOptional<ICurio> curio = LazyOptional.of(() -> new ICurio() {
@Override
public void curioTick(SlotContext slotContext) {
stack.getItem().inventoryTick(stack, slotContext.entity().level(), slotContext.entity(), -1, false);
}

@Override
public ItemStack getStack() {
return stack;
}
public void addCapabilities(RegisterCapabilitiesEvent event) {
for (var item : CuriosCompat.TYPES.keySet()) {
event.registerItem(CuriosCapability.ITEM, (s, c) -> new ICurio() {
@Override
public void curioTick(SlotContext slotContext) {
s.getItem().inventoryTick(s, slotContext.entity().level(), slotContext.entity(), -1, false);
}

@Override
public boolean canEquipFromUse(SlotContext slotContext) {
return true;
}
@Override
public ItemStack getStack() {
return s;
}

@Override
public boolean canSync(SlotContext slotContext) {
return true;
}
});
@Override
public boolean canEquipFromUse(SlotContext slotContext) {
return true;
}

@Nonnull
@Override
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
if (cap != CuriosCapability.ITEM)
return LazyOptional.empty();
return this.curio.cast();
public boolean canSync(SlotContext slotContext) {
return true;
}
});
}, item);
}
}

@Override
public void gatherData(GatherDataEvent event) {
event.getGenerator().addProvider(event.includeServer(), new CuriosProvider(event.getGenerator().getPackOutput(), event.getExistingFileHelper(), event.getLookupProvider()));
}

@Override
public void addItemTags(ItemTagProvider provider) {
for (var entry : CuriosCompat.TYPES.entrySet()) {
var tag = ItemTags.create(new ResourceLocation("curios", entry.getValue()));
provider.tag(tag).add(entry.getKey());
}
}

private static class CuriosProvider extends CuriosDataProvider {

public CuriosProvider(PackOutput output, ExistingFileHelper fileHelper, CompletableFuture<HolderLookup.Provider> registries) {
super(NaturesAura.MOD_ID, output, fileHelper, registries);
}

@Override
public void generate(HolderLookup.Provider provider, ExistingFileHelper existingFileHelper) {
for (var type : CuriosCompat.TYPES.values()) {
this.createSlot(type);
}
}

}

}
13 changes: 10 additions & 3 deletions src/main/java/de/ellpeck/naturesaura/compat/ICompat.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,19 @@

import de.ellpeck.naturesaura.data.ItemTagProvider;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
import net.neoforged.neoforge.data.event.GatherDataEvent;

public interface ICompat {

void setup(FMLCommonSetupEvent event);
default void setup(FMLCommonSetupEvent event) {}

void setupClient();
default void setupClient() {}

default void gatherData(GatherDataEvent event) {}

default void addItemTags(ItemTagProvider provider) {}

default void addCapabilities(RegisterCapabilitiesEvent event) {}

void addItemTags(ItemTagProvider provider);
}
20 changes: 13 additions & 7 deletions src/main/java/de/ellpeck/naturesaura/data/ModData.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
package de.ellpeck.naturesaura.data;

import de.ellpeck.naturesaura.NaturesAura;
import de.ellpeck.naturesaura.compat.Compat;
import de.ellpeck.naturesaura.gen.ModFeatures;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.Cloner;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.RegistrySetBuilder;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.loot.LootTableProvider;
import net.minecraft.data.registries.VanillaRegistries;
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import net.neoforged.neoforge.registries.DataPackRegistriesHooks;
import net.neoforged.neoforge.registries.NeoForgeRegistries;

import java.util.List;
Expand All @@ -30,6 +32,8 @@ public static void gatherData(GatherDataEvent event) {
var lookup = event.getLookupProvider();
var existing = event.getExistingFileHelper();

Compat.gatherData(event);

var blockTags = new BlockTagProvider(out, lookup, existing);
gen.addProvider(event.includeServer(), blockTags);
gen.addProvider(event.includeServer(), new ItemTagProvider(out, lookup, blockTags.contentsGetter(), existing));
Expand All @@ -39,16 +43,18 @@ public static void gatherData(GatherDataEvent event) {
gen.addProvider(event.includeServer(), new DatapackBuiltinEntriesProvider(out, CompletableFuture.supplyAsync(ModData::getProvider), Set.of(NaturesAura.MOD_ID)));
}

private static HolderLookup.Provider getProvider() {
final RegistrySetBuilder registryBuilder = new RegistrySetBuilder();
@SuppressWarnings("UnstableApiUsage")
private static RegistrySetBuilder.PatchedRegistries getProvider() {
final var registryBuilder = new RegistrySetBuilder();
registryBuilder.add(Registries.CONFIGURED_FEATURE, ModFeatures.Configured::bootstrap);
registryBuilder.add(Registries.PLACED_FEATURE, ModFeatures.Placed::bootstrap);
registryBuilder.add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, BiomeModifiers::bootstrap);
// We need the BIOME registry to be present, so we can use a biome tag, doesn't matter that it's empty
registryBuilder.add(Registries.BIOME, context -> {
});
var regAccess = RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY);
return registryBuilder.buildPatch(regAccess, VanillaRegistries.createLookup());
var factory = new Cloner.Factory();
DataPackRegistriesHooks.getDataPackRegistriesWithDimensions().forEach(data -> data.runWithArguments(factory::addCodec));
return registryBuilder.buildPatch(RegistryAccess.fromRegistryOfRegistries(BuiltInRegistries.REGISTRY), VanillaRegistries.createLookup(), factory);
}

}
Loading

0 comments on commit f7f425d

Please sign in to comment.