diff --git a/src/main/java/fr/sushi/charmsnfabrics/CharmsAndFabrics.java b/src/main/java/fr/sushi/charmsnfabrics/CharmsAndFabrics.java index 07a0dd0..03c9d77 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/CharmsAndFabrics.java +++ b/src/main/java/fr/sushi/charmsnfabrics/CharmsAndFabrics.java @@ -1,7 +1,9 @@ package fr.sushi.charmsnfabrics; import fr.sushi.charmsnfabrics.common.CnFRegistries; +import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.ModContainer; diff --git a/src/main/java/fr/sushi/charmsnfabrics/client/CnFClient.java b/src/main/java/fr/sushi/charmsnfabrics/client/CnFClient.java index c0e47e9..1792c08 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/client/CnFClient.java +++ b/src/main/java/fr/sushi/charmsnfabrics/client/CnFClient.java @@ -1,11 +1,15 @@ package fr.sushi.charmsnfabrics.client; import fr.sushi.charmsnfabrics.CharmsAndFabrics; +import fr.sushi.charmsnfabrics.client.datagen.CnFBlockLootProvider; +import fr.sushi.charmsnfabrics.client.datagen.CnFBlockTagsProvider; import fr.sushi.charmsnfabrics.client.datagen.CnFModelProvider; import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel; import fr.sushi.charmsnfabrics.client.renderer.FloralWorkbenchRenderer; import fr.sushi.charmsnfabrics.client.renderer.FlowerCrownRenderer; import fr.sushi.charmsnfabrics.common.CnFRegistries; +import net.minecraft.data.loot.LootTableProvider; +import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.ModContainer; @@ -13,12 +17,14 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.Mod; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent; -import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import net.neoforged.neoforge.client.gui.ConfigurationScreen; import net.neoforged.neoforge.client.gui.IConfigScreenFactory; import net.neoforged.neoforge.data.event.GatherDataEvent; import top.theillusivec4.curios.api.client.ICurioRenderer; +import java.util.List; +import java.util.Set; + @Mod(value = CharmsAndFabrics.MODID, dist = Dist.CLIENT) @EventBusSubscriber(modid = CharmsAndFabrics.MODID, value = Dist.CLIENT) public class CnFClient @@ -57,12 +63,11 @@ public class CnFClient private static void onGatherClientData(final GatherDataEvent.Client event) { event.createProvider(CnFModelProvider::new); + event.createProvider( + (output, lookup) -> new LootTableProvider(output, Set.of(), + List.of(new LootTableProvider.SubProviderEntry( + CnFBlockLootProvider::new, + LootContextParamSets.BLOCK)), lookup)); + event.createProvider(CnFBlockTagsProvider::new); } - -// @SubscribeEvent -// private static void onScreenAttach(RegisterMenuScreensEvent event) -// { -// event.register(CnFRegistries.MenuTypes.FLORAL_WB_MENU.get(), -// FloralWorkbenchScreen::new); -// } } diff --git a/src/main/java/fr/sushi/charmsnfabrics/client/datagen/CnFBlockLootProvider.java b/src/main/java/fr/sushi/charmsnfabrics/client/datagen/CnFBlockLootProvider.java new file mode 100644 index 0000000..84061ca --- /dev/null +++ b/src/main/java/fr/sushi/charmsnfabrics/client/datagen/CnFBlockLootProvider.java @@ -0,0 +1,31 @@ +package fr.sushi.charmsnfabrics.client.datagen; + +import fr.sushi.charmsnfabrics.common.CnFRegistries; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.block.Block; + +import java.util.Set; + +public class CnFBlockLootProvider extends BlockLootSubProvider +{ + public CnFBlockLootProvider(HolderLookup.Provider registries) + { + super(Set.of(), FeatureFlags.DEFAULT_FLAGS, registries); + } + + @Override + protected Iterable getKnownBlocks() + { + return CnFRegistries.Blocks.BLOCKS.getEntries().stream() + .map(block -> (Block) block.get()) + .toList(); + } + + @Override + protected void generate() + { + this.dropSelf(CnFRegistries.Blocks.FLORAL_WORKBENCH.get()); + } +} diff --git a/src/main/java/fr/sushi/charmsnfabrics/client/datagen/CnFBlockTagsProvider.java b/src/main/java/fr/sushi/charmsnfabrics/client/datagen/CnFBlockTagsProvider.java new file mode 100644 index 0000000..79cb54b --- /dev/null +++ b/src/main/java/fr/sushi/charmsnfabrics/client/datagen/CnFBlockTagsProvider.java @@ -0,0 +1,25 @@ +package fr.sushi.charmsnfabrics.client.datagen; + +import fr.sushi.charmsnfabrics.CharmsAndFabrics; +import fr.sushi.charmsnfabrics.common.CnFRegistries; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.PackOutput; +import net.minecraft.tags.BlockTags; +import net.neoforged.neoforge.common.data.BlockTagsProvider; + +import java.util.concurrent.CompletableFuture; + +public class CnFBlockTagsProvider extends BlockTagsProvider +{ + public CnFBlockTagsProvider(PackOutput output, + CompletableFuture lookupProvider) + { + super(output, lookupProvider, CharmsAndFabrics.MODID); + } + + @Override + protected void addTags(HolderLookup.Provider provider) + { + this.tag(BlockTags.MINEABLE_WITH_AXE).add(CnFRegistries.Blocks.FLORAL_WORKBENCH.get()); + } +} diff --git a/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java b/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java index 20a79b4..33e439b 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java +++ b/src/main/java/fr/sushi/charmsnfabrics/common/CnFRegistries.java @@ -12,8 +12,10 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.CreativeModeTabs; import net.minecraft.world.item.Item; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.material.MapColor; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.registries.DeferredBlock; import net.neoforged.neoforge.registries.DeferredHolder; @@ -51,7 +53,12 @@ public class CnFRegistries .setId(ResourceKey.create( Registries.BLOCK, registry_name)) - .noOcclusion())); + .noOcclusion() + .mapColor( + MapColor.WOOD) + .strength(2.0f, 3.0f) + .sound(SoundType.WOOD) + .ignitedByLava())); } public static class Tabs diff --git a/src/main/java/fr/sushi/charmsnfabrics/common/block/FloralWorkbench.java b/src/main/java/fr/sushi/charmsnfabrics/common/block/FloralWorkbench.java index fef640a..6e13989 100644 --- a/src/main/java/fr/sushi/charmsnfabrics/common/block/FloralWorkbench.java +++ b/src/main/java/fr/sushi/charmsnfabrics/common/block/FloralWorkbench.java @@ -5,10 +5,7 @@ import fr.sushi.charmsnfabrics.common.CnFRegistries; import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkbenchBlockEntity; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.world.Containers; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.InteractionResult; -import net.minecraft.world.MenuProvider; +import net.minecraft.world.*; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -109,12 +106,15 @@ public class FloralWorkbench extends BaseEntityBlock if (!level.isClientSide()) { IItemHandler handler = blockentity.getItemHandler(); - ItemStack crown = handler.getStackInSlot(0); if (hasCrown && emptyHand) { - Containers.dropItemStack(level, pos.getX(), - pos.getY() + 1.0f, pos.getZ(), crown); + ItemStack extracted = handler.extractItem(0, 1, false); + if (!player.hasInfiniteMaterials()) + { + Containers.dropItemStack(level, pos.getX(), + pos.getY() + 1.0f, pos.getZ(), extracted); + } blockentity.setChanged(); level.sendBlockUpdated(pos, state, state, 3); return InteractionResult.SUCCESS_SERVER; @@ -127,14 +127,16 @@ public class FloralWorkbench extends BaseEntityBlock blockentity.setChanged(); level.sendBlockUpdated(pos, state, state, 3); return InteractionResult.CONSUME; - } else { - return InteractionResult.FAIL; + } + else + { + return InteractionResult.PASS; } } else { return !hasCrown ^ emptyHand ? InteractionResult.SUCCESS : - InteractionResult.FAIL; + InteractionResult.PASS; } } else