Skip to content

Commit f7f425d

Browse files
committed
IT COMPILES???
1 parent f2547e6 commit f7f425d

21 files changed

+178
-266
lines changed

src/main/java/de/ellpeck/naturesaura/Helper.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package de.ellpeck.naturesaura;
22

33
import com.mojang.blaze3d.vertex.VertexConsumer;
4-
import de.ellpeck.naturesaura.api.NaturesAuraAPI;
54
import de.ellpeck.naturesaura.api.aura.container.IAuraContainer;
65
import de.ellpeck.naturesaura.api.aura.item.IAuraRecharge;
76
import de.ellpeck.naturesaura.api.misc.ILevelData;
@@ -14,7 +13,6 @@
1413
import net.minecraft.client.Minecraft;
1514
import net.minecraft.client.gui.GuiGraphics;
1615
import net.minecraft.core.BlockPos;
17-
import net.minecraft.core.Direction;
1816
import net.minecraft.core.Registry;
1917
import net.minecraft.core.registries.BuiltInRegistries;
2018
import net.minecraft.resources.ResourceLocation;
@@ -45,13 +43,12 @@
4543
import net.neoforged.api.distmarker.Dist;
4644
import net.neoforged.api.distmarker.OnlyIn;
4745
import net.neoforged.neoforge.capabilities.Capabilities;
46+
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
4847
import net.neoforged.neoforge.items.IItemHandler;
4948
import net.neoforged.neoforge.items.IItemHandlerModifiable;
5049
import top.theillusivec4.curios.api.CuriosApi;
5150
import top.theillusivec4.curios.api.SlotResult;
5251

53-
import javax.annotation.Nonnull;
54-
import javax.annotation.Nullable;
5552
import java.lang.reflect.Modifier;
5653
import java.util.List;
5754
import java.util.Locale;
@@ -200,21 +197,11 @@ public static InteractionResult putStackOnTile(Player player, InteractionHand ha
200197
return InteractionResult.CONSUME;
201198
}
202199

203-
public static ICapabilityProvider makeRechargeProvider(ItemStack stack, boolean needsSelected) {
204-
return new ICapabilityProvider() {
205-
private final LazyOptional<IAuraRecharge> recharge = LazyOptional.of(() -> (container, containerSlot, itemSlot, isSelected) -> {
206-
if (isSelected || !needsSelected)
207-
return Helper.rechargeAuraItem(stack, container, 300);
208-
return false;
209-
});
210-
211-
@Nullable
212-
@Override
213-
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> capability, @Nullable Direction facing) {
214-
if (capability == NaturesAuraAPI.CAP_AURA_RECHARGE)
215-
return this.recharge.cast();
216-
return LazyOptional.empty();
217-
}
200+
public static ICapabilityProvider<ItemStack, Void, IAuraRecharge> makeRechargeProvider(boolean needsSelected) {
201+
return (stack, ctx) -> (container, containerSlot, itemSlot, isSelected) -> {
202+
if (isSelected || !needsSelected)
203+
return Helper.rechargeAuraItem(stack, container, 300);
204+
return false;
218205
};
219206
}
220207

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

314301
public static ItemStack getEquippedItem(Predicate<ItemStack> predicate, Player player, boolean hotbarOnly) {
315302
if (Compat.hasCompat("curios")) {
316-
var stack = CuriosApi.getCuriosHelper().findFirstCurio(player, predicate).map(SlotResult::stack);
317-
if (stack.isPresent())
318-
return stack.get();
303+
var inventory = CuriosApi.getCuriosInventory(player);
304+
if (inventory.isPresent()) {
305+
var stack = inventory.get().findFirstCurio(predicate).map(SlotResult::stack);
306+
if (stack.isPresent())
307+
return stack.get();
308+
}
319309
}
320310
var invSize = hotbarOnly ? 9 : player.getInventory().getContainerSize();
321311
for (var i = 0; i < invSize; i++) {

src/main/java/de/ellpeck/naturesaura/blocks/BlockWoodStand.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@
2424
import net.minecraft.world.phys.shapes.CollisionContext;
2525
import net.minecraft.world.phys.shapes.Shapes;
2626
import net.minecraft.world.phys.shapes.VoxelShape;
27+
import net.neoforged.bus.api.SubscribeEvent;
2728
import net.neoforged.neoforge.common.NeoForge;
2829
import net.neoforged.neoforge.event.level.SaplingGrowTreeEvent;
29-
import net.neoforged.bus.api.SubscribeEvent;
3030
import org.apache.commons.lang3.mutable.MutableObject;
3131

3232
import java.util.ArrayList;
33-
import java.util.Arrays;
3433
import java.util.List;
3534

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

9190
if (fine && required.isEmpty()) {
92-
toPick.getValue().setRitual(pos, recipe.value());
91+
toPick.getValue().setRitual(pos, recipe);
9392
break;
9493
}
9594
}

src/main/java/de/ellpeck/naturesaura/blocks/tiles/render/RenderAuraTimer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
1717
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
1818
import net.minecraft.resources.ResourceLocation;
19+
import net.neoforged.neoforge.capabilities.Capabilities;
1920

2021
public class RenderAuraTimer implements BlockEntityRenderer<BlockEntityAuraTimer> {
2122

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

2829
@Override
2930
public void render(BlockEntityAuraTimer tile, float partialTicks, PoseStack stack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn) {
30-
var bottle = tile.getItemHandler().getStackInSlot(0);
31+
var bottle = tile.getLevel().getCapability(Capabilities.ItemHandler.BLOCK, tile.getBlockPos(), tile.getBlockState(), tile, null).getStackInSlot(0);
3132
if (bottle.isEmpty())
3233
return;
3334
stack.pushPose();
@@ -61,5 +62,7 @@ public AuraModel() {
6162
public void renderToBuffer(PoseStack matrixStackIn, VertexConsumer bufferIn, int packedLightIn, int packedOverlayIn, float red, float green, float blue, float alpha) {
6263
this.model.render(matrixStackIn, bufferIn, packedLightIn, packedOverlayIn, red, green, blue, alpha);
6364
}
65+
6466
}
67+
6568
}

src/main/java/de/ellpeck/naturesaura/compat/Compat.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import de.ellpeck.naturesaura.data.ItemTagProvider;
77
import net.neoforged.fml.ModList;
88
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
9+
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
10+
import net.neoforged.neoforge.data.event.GatherDataEvent;
911

1012
import java.util.HashMap;
1113
import java.util.Map;
@@ -34,12 +36,20 @@ public static boolean hasCompat(String mod) {
3436
return Compat.MODULES.containsKey(mod);
3537
}
3638

37-
public static void addItemTags(ItemTagProvider provider) {
39+
public static void gatherData(GatherDataEvent event) {
3840
// since other mods don't get loaded in runData, just populate all modules
3941
Compat.populateModules(s -> true);
42+
Compat.MODULES.values().forEach(m -> m.gatherData(event));
43+
}
44+
45+
public static void addItemTags(ItemTagProvider provider) {
4046
Compat.MODULES.values().forEach(m -> m.addItemTags(provider));
4147
}
4248

49+
public static void addCapabilities(RegisterCapabilitiesEvent event) {
50+
Compat.MODULES.values().forEach(c -> c.addCapabilities(event));
51+
}
52+
4353
private static void populateModules(Predicate<String> isLoaded) {
4454
for (var entry : Compat.MODULE_TYPES.entrySet()) {
4555
var id = entry.getKey();
@@ -49,4 +59,5 @@ private static void populateModules(Predicate<String> isLoaded) {
4959
}
5060
}
5161
}
62+
5263
}

src/main/java/de/ellpeck/naturesaura/compat/CuriosCompat.java

Lines changed: 46 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,22 @@
44
import de.ellpeck.naturesaura.NaturesAura;
55
import de.ellpeck.naturesaura.data.ItemTagProvider;
66
import de.ellpeck.naturesaura.items.ModItems;
7-
import net.minecraft.core.Direction;
7+
import net.minecraft.core.HolderLookup;
8+
import net.minecraft.data.PackOutput;
89
import net.minecraft.resources.ResourceLocation;
910
import net.minecraft.tags.ItemTags;
1011
import net.minecraft.world.item.Item;
1112
import net.minecraft.world.item.ItemStack;
12-
import net.neoforged.neoforge.common.NeoForge;
13-
import net.neoforged.neoforge.common.capabilities.Capability;
14-
import net.neoforged.fml.InterModComms;
15-
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
16-
import net.neoforged.fml.event.lifecycle.InterModEnqueueEvent;
17-
import net.neoforged.fml.javafmlmod.FMLJavaModLoadingContext;
18-
import net.neoforged.neoforge.common.capabilities.ICapabilityProvider;
19-
import net.neoforged.neoforge.common.util.LazyOptional;
20-
import net.neoforged.neoforge.event.AttachCapabilitiesEvent;
13+
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
14+
import net.neoforged.neoforge.common.data.ExistingFileHelper;
15+
import net.neoforged.neoforge.data.event.GatherDataEvent;
2116
import top.theillusivec4.curios.api.CuriosCapability;
17+
import top.theillusivec4.curios.api.CuriosDataProvider;
2218
import top.theillusivec4.curios.api.SlotContext;
23-
import top.theillusivec4.curios.api.SlotTypeMessage;
2419
import top.theillusivec4.curios.api.type.capability.ICurio;
2520

26-
import javax.annotation.Nonnull;
27-
import javax.annotation.Nullable;
2821
import java.util.Map;
22+
import java.util.concurrent.CompletableFuture;
2923

3024
public class CuriosCompat implements ICompat {
3125

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

4135
@Override
42-
public void setup(FMLCommonSetupEvent event) {
43-
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::sendImc);
44-
NeoForge.EVENT_BUS.addGenericListener(ItemStack.class, this::onCapabilitiesAttach);
45-
}
46-
47-
@Override
48-
public void setupClient() {
49-
50-
}
51-
52-
private void sendImc(InterModEnqueueEvent event) {
53-
CuriosCompat.TYPES.values().stream().distinct().forEach(t -> InterModComms.sendTo("curios", SlotTypeMessage.REGISTER_TYPE, () -> new SlotTypeMessage.Builder(t).build()));
54-
}
55-
56-
private void onCapabilitiesAttach(AttachCapabilitiesEvent<ItemStack> event) {
57-
var stack = event.getObject();
58-
if (CuriosCompat.TYPES.containsKey(stack.getItem())) {
59-
event.addCapability(new ResourceLocation(NaturesAura.MOD_ID, "curios"), new ICapabilityProvider() {
60-
private final LazyOptional<ICurio> curio = LazyOptional.of(() -> new ICurio() {
61-
@Override
62-
public void curioTick(SlotContext slotContext) {
63-
stack.getItem().inventoryTick(stack, slotContext.entity().level(), slotContext.entity(), -1, false);
64-
}
65-
66-
@Override
67-
public ItemStack getStack() {
68-
return stack;
69-
}
36+
public void addCapabilities(RegisterCapabilitiesEvent event) {
37+
for (var item : CuriosCompat.TYPES.keySet()) {
38+
event.registerItem(CuriosCapability.ITEM, (s, c) -> new ICurio() {
39+
@Override
40+
public void curioTick(SlotContext slotContext) {
41+
s.getItem().inventoryTick(s, slotContext.entity().level(), slotContext.entity(), -1, false);
42+
}
7043

71-
@Override
72-
public boolean canEquipFromUse(SlotContext slotContext) {
73-
return true;
74-
}
44+
@Override
45+
public ItemStack getStack() {
46+
return s;
47+
}
7548

76-
@Override
77-
public boolean canSync(SlotContext slotContext) {
78-
return true;
79-
}
80-
});
49+
@Override
50+
public boolean canEquipFromUse(SlotContext slotContext) {
51+
return true;
52+
}
8153

82-
@Nonnull
8354
@Override
84-
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
85-
if (cap != CuriosCapability.ITEM)
86-
return LazyOptional.empty();
87-
return this.curio.cast();
55+
public boolean canSync(SlotContext slotContext) {
56+
return true;
8857
}
89-
});
58+
}, item);
9059
}
9160
}
9261

62+
@Override
63+
public void gatherData(GatherDataEvent event) {
64+
event.getGenerator().addProvider(event.includeServer(), new CuriosProvider(event.getGenerator().getPackOutput(), event.getExistingFileHelper(), event.getLookupProvider()));
65+
}
66+
9367
@Override
9468
public void addItemTags(ItemTagProvider provider) {
9569
for (var entry : CuriosCompat.TYPES.entrySet()) {
9670
var tag = ItemTags.create(new ResourceLocation("curios", entry.getValue()));
9771
provider.tag(tag).add(entry.getKey());
9872
}
9973
}
74+
75+
private static class CuriosProvider extends CuriosDataProvider {
76+
77+
public CuriosProvider(PackOutput output, ExistingFileHelper fileHelper, CompletableFuture<HolderLookup.Provider> registries) {
78+
super(NaturesAura.MOD_ID, output, fileHelper, registries);
79+
}
80+
81+
@Override
82+
public void generate(HolderLookup.Provider provider, ExistingFileHelper existingFileHelper) {
83+
for (var type : CuriosCompat.TYPES.values()) {
84+
this.createSlot(type);
85+
}
86+
}
87+
88+
}
89+
10090
}

src/main/java/de/ellpeck/naturesaura/compat/ICompat.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,19 @@
22

33
import de.ellpeck.naturesaura.data.ItemTagProvider;
44
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
5+
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
6+
import net.neoforged.neoforge.data.event.GatherDataEvent;
57

68
public interface ICompat {
79

8-
void setup(FMLCommonSetupEvent event);
10+
default void setup(FMLCommonSetupEvent event) {}
911

10-
void setupClient();
12+
default void setupClient() {}
13+
14+
default void gatherData(GatherDataEvent event) {}
15+
16+
default void addItemTags(ItemTagProvider provider) {}
17+
18+
default void addCapabilities(RegisterCapabilitiesEvent event) {}
1119

12-
void addItemTags(ItemTagProvider provider);
1320
}

src/main/java/de/ellpeck/naturesaura/data/ModData.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
package de.ellpeck.naturesaura.data;
22

33
import de.ellpeck.naturesaura.NaturesAura;
4+
import de.ellpeck.naturesaura.compat.Compat;
45
import de.ellpeck.naturesaura.gen.ModFeatures;
5-
import net.minecraft.core.HolderLookup;
6+
import net.minecraft.core.Cloner;
67
import net.minecraft.core.RegistryAccess;
78
import net.minecraft.core.RegistrySetBuilder;
89
import net.minecraft.core.registries.BuiltInRegistries;
910
import net.minecraft.core.registries.Registries;
1011
import net.minecraft.data.loot.LootTableProvider;
1112
import net.minecraft.data.registries.VanillaRegistries;
1213
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
13-
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
14-
import net.neoforged.neoforge.data.event.GatherDataEvent;
1514
import net.neoforged.bus.api.SubscribeEvent;
1615
import net.neoforged.fml.common.Mod;
16+
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
17+
import net.neoforged.neoforge.data.event.GatherDataEvent;
18+
import net.neoforged.neoforge.registries.DataPackRegistriesHooks;
1719
import net.neoforged.neoforge.registries.NeoForgeRegistries;
1820

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

35+
Compat.gatherData(event);
36+
3337
var blockTags = new BlockTagProvider(out, lookup, existing);
3438
gen.addProvider(event.includeServer(), blockTags);
3539
gen.addProvider(event.includeServer(), new ItemTagProvider(out, lookup, blockTags.contentsGetter(), existing));
@@ -39,16 +43,18 @@ public static void gatherData(GatherDataEvent event) {
3943
gen.addProvider(event.includeServer(), new DatapackBuiltinEntriesProvider(out, CompletableFuture.supplyAsync(ModData::getProvider), Set.of(NaturesAura.MOD_ID)));
4044
}
4145

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

5460
}

0 commit comments

Comments
 (0)