Compare commits

..

No commits in common. "aa5adbd59e519b81ee0196702411b89413a9250a" and "33e659fa47f7bfbd3954896fdd9a3374751d6bcd" have entirely different histories.

14 changed files with 90 additions and 131 deletions

View file

@ -1,17 +1,38 @@
package fr.sushi.charmsnfabrics; package fr.sushi.charmsnfabrics;
import fr.sushi.charmsnfabrics.common.CnFRegistries; import fr.sushi.charmsnfabrics.common.CharmsAndFabricRegistries;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.BlockItem;
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.Blocks;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.MapColor;
import net.neoforged.bus.api.IEventBus; import net.neoforged.bus.api.IEventBus;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.Mod; import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModContainer;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.common.NeoForge;
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent;
import net.neoforged.neoforge.event.server.ServerStartingEvent;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
import net.neoforged.neoforge.registries.DeferredRegister;
@Mod(CharmsAndFabrics.MODID) @Mod(CharmsAndFabrics.MODID)
public class CharmsAndFabrics { public class CharmsAndFabrics {
public static final String MODID = "charmsnfabrics"; public static final String MODID = "charmsnfabrics";
public CharmsAndFabrics(IEventBus modEventBus, ModContainer modContainer) { public CharmsAndFabrics(IEventBus modEventBus, ModContainer modContainer) {
CnFRegistries.register(modEventBus); CharmsAndFabricRegistries.register(modEventBus);
modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC); modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC);
} }

View file

@ -4,7 +4,7 @@ import fr.sushi.charmsnfabrics.CharmsAndFabrics;
import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
public class CnFLayers public class CharmsAndFabricsLayers
{ {
public static final ModelLayerLocation CROWN_LAYER = new ModelLayerLocation( public static final ModelLayerLocation CROWN_LAYER = new ModelLayerLocation(
ResourceLocation.fromNamespaceAndPath(CharmsAndFabrics.MODID, ResourceLocation.fromNamespaceAndPath(CharmsAndFabrics.MODID,

View file

@ -1,11 +1,10 @@
package fr.sushi.charmsnfabrics.client; package fr.sushi.charmsnfabrics.client;
import fr.sushi.charmsnfabrics.CharmsAndFabrics; import fr.sushi.charmsnfabrics.CharmsAndFabrics;
import fr.sushi.charmsnfabrics.client.datagen.CnFModelProvider;
import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel; import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel;
import fr.sushi.charmsnfabrics.client.renderer.FloralWorkstationRenderer; import fr.sushi.charmsnfabrics.client.renderer.FloralWorkstationRenderer;
import fr.sushi.charmsnfabrics.client.renderer.FlowerCrownRenderer; import fr.sushi.charmsnfabrics.client.renderer.FlowerCrownRenderer;
import fr.sushi.charmsnfabrics.common.CnFRegistries; import fr.sushi.charmsnfabrics.common.CharmsAndFabricRegistries;
import net.neoforged.api.distmarker.Dist; import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModContainer;
@ -15,14 +14,13 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.neoforge.client.event.EntityRenderersEvent; import net.neoforged.neoforge.client.event.EntityRenderersEvent;
import net.neoforged.neoforge.client.gui.ConfigurationScreen; import net.neoforged.neoforge.client.gui.ConfigurationScreen;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory; import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import net.neoforged.neoforge.data.event.GatherDataEvent;
import top.theillusivec4.curios.api.client.ICurioRenderer; import top.theillusivec4.curios.api.client.ICurioRenderer;
@Mod(value = CharmsAndFabrics.MODID, dist = Dist.CLIENT) @Mod(value = CharmsAndFabrics.MODID, dist = Dist.CLIENT)
@EventBusSubscriber(modid = CharmsAndFabrics.MODID, value = Dist.CLIENT) @EventBusSubscriber(modid = CharmsAndFabrics.MODID, value = Dist.CLIENT)
public class CnFClient public class CharmsFabricsClient
{ {
public CnFClient(ModContainer container) public CharmsFabricsClient(ModContainer container)
{ {
container.registerExtensionPoint(IConfigScreenFactory.class, container.registerExtensionPoint(IConfigScreenFactory.class,
ConfigurationScreen::new); ConfigurationScreen::new);
@ -32,7 +30,7 @@ public class CnFClient
private static void onClientSetup(final FMLClientSetupEvent event) private static void onClientSetup(final FMLClientSetupEvent event)
{ {
ICurioRenderer.register( ICurioRenderer.register(
CnFRegistries.Items.FLOWER_CROWN.get(), CharmsAndFabricRegistries.Items.FLOWER_CROWN.get(),
FlowerCrownRenderer::new); FlowerCrownRenderer::new);
} }
@ -40,7 +38,7 @@ public class CnFClient
private static void onRegisterLayerDefinitions( private static void onRegisterLayerDefinitions(
final EntityRenderersEvent.RegisterLayerDefinitions event) final EntityRenderersEvent.RegisterLayerDefinitions event)
{ {
event.registerLayerDefinition(CnFLayers.CROWN_LAYER, event.registerLayerDefinition(CharmsAndFabricsLayers.CROWN_LAYER,
FlowerCrownModel::createLayer); FlowerCrownModel::createLayer);
} }
@ -49,12 +47,7 @@ public class CnFClient
final EntityRenderersEvent.RegisterRenderers event) final EntityRenderersEvent.RegisterRenderers event)
{ {
event.registerBlockEntityRenderer( event.registerBlockEntityRenderer(
CnFRegistries.Entities.FLORAL_BLOCK_ENTITY.get(), CharmsAndFabricRegistries.Entities.FLORAL_BLOCK_ENTITY.get(),
FloralWorkstationRenderer::new); FloralWorkstationRenderer::new);
} }
@SubscribeEvent
private static void onGatherClientData(final GatherDataEvent.Client event) {
event.createProvider(CnFModelProvider::new);
}
} }

View file

@ -1,53 +0,0 @@
package fr.sushi.charmsnfabrics.client.datagen;
import fr.sushi.charmsnfabrics.CharmsAndFabrics;
import fr.sushi.charmsnfabrics.common.CnFRegistries;
import net.minecraft.client.data.models.BlockModelGenerators;
import net.minecraft.client.data.models.ItemModelGenerators;
import net.minecraft.client.data.models.ModelProvider;
import net.minecraft.client.data.models.MultiVariant;
import net.minecraft.client.data.models.model.ModelLocationUtils;
import net.minecraft.client.data.models.model.ModelTemplates;
import net.minecraft.client.renderer.item.BlockModelWrapper;
import net.minecraft.client.renderer.item.ClientItem;
import net.minecraft.data.PackOutput;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import java.util.Collections;
public class CnFModelProvider extends ModelProvider
{
public CnFModelProvider(PackOutput output)
{
super(output, CharmsAndFabrics.MODID);
}
private void registerFloralWorkbench(BlockModelGenerators blockModels)
{
Block block = CnFRegistries.Blocks.FLORAL_WORKSTATION.get();
ResourceLocation model = ModelLocationUtils.getModelLocation(block);
MultiVariant variants = BlockModelGenerators.plainVariant(model);
blockModels.blockStateOutput.accept(
BlockModelGenerators.createSimpleBlock(block, variants)
.with(BlockModelGenerators.ROTATION_HORIZONTAL_FACING_ALT));
// blockModels.modelOutput.accept(ModelLocationUtils.getModelLocation(block));
}
private void registerFlowerCrown(ItemModelGenerators itemModels)
{
Item item = CnFRegistries.Items.FLOWER_CROWN.get();
itemModels.generateFlatItem(item, ModelTemplates.FLAT_ITEM);
}
@Override
protected void registerModels(BlockModelGenerators blockModels,
ItemModelGenerators itemModels)
{
this.registerFlowerCrown(itemModels);
this.registerFloralWorkbench(blockModels);
}
}

View file

@ -3,9 +3,9 @@ package fr.sushi.charmsnfabrics.client.renderer;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import fr.sushi.charmsnfabrics.CharmsAndFabrics; import fr.sushi.charmsnfabrics.CharmsAndFabrics;
import fr.sushi.charmsnfabrics.client.CnFLayers; import fr.sushi.charmsnfabrics.client.CharmsAndFabricsLayers;
import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel; import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel;
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkstationBlockEntity; import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkshopBlockEntity;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
@ -13,18 +13,18 @@ import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
public class FloralWorkstationRenderer implements BlockEntityRenderer<FloralWorkstationBlockEntity> public class FloralWorkstationRenderer implements BlockEntityRenderer<FloralWorkshopBlockEntity>
{ {
private final FlowerCrownModel model; private final FlowerCrownModel model;
public FloralWorkstationRenderer(BlockEntityRendererProvider.Context ctx) public FloralWorkstationRenderer(BlockEntityRendererProvider.Context ctx)
{ {
this.model = new FlowerCrownModel( this.model = new FlowerCrownModel(
ctx.bakeLayer(CnFLayers.CROWN_LAYER)); ctx.bakeLayer(CharmsAndFabricsLayers.CROWN_LAYER));
} }
@Override @Override
public void render(FloralWorkstationBlockEntity blockEntity, float partialTick, public void render(FloralWorkshopBlockEntity blockEntity, float partialTick,
PoseStack poseStack, MultiBufferSource bufferSource, PoseStack poseStack, MultiBufferSource bufferSource,
int packedLight, int packedOverlay, Vec3 cameraPos) int packedLight, int packedOverlay, Vec3 cameraPos)
{ {

View file

@ -2,7 +2,7 @@ package fr.sushi.charmsnfabrics.client.renderer;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import fr.sushi.charmsnfabrics.client.CnFLayers; import fr.sushi.charmsnfabrics.client.CharmsAndFabricsLayers;
import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel; import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel;
import fr.sushi.charmsnfabrics.common.item.FlowerCrown; import fr.sushi.charmsnfabrics.common.item.FlowerCrown;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -28,7 +28,7 @@ public class FlowerCrownRenderer implements ICurioRenderer
{ {
this.model = new FlowerCrownModel( this.model = new FlowerCrownModel(
Minecraft.getInstance().getEntityModels() Minecraft.getInstance().getEntityModels()
.bakeLayer(CnFLayers.CROWN_LAYER)); .bakeLayer(CharmsAndFabricsLayers.CROWN_LAYER));
} }
@Override @Override

View file

@ -2,7 +2,7 @@ package fr.sushi.charmsnfabrics.common;
import fr.sushi.charmsnfabrics.CharmsAndFabrics; import fr.sushi.charmsnfabrics.CharmsAndFabrics;
import fr.sushi.charmsnfabrics.common.block.FloralWorkstation; import fr.sushi.charmsnfabrics.common.block.FloralWorkstation;
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkstationBlockEntity; import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkshopBlockEntity;
import fr.sushi.charmsnfabrics.common.item.FlowerCrown; import fr.sushi.charmsnfabrics.common.item.FlowerCrown;
import net.minecraft.core.registries.Registries; import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component; import net.minecraft.network.chat.Component;
@ -23,7 +23,7 @@ import net.neoforged.neoforge.registries.DeferredRegister;
import java.util.Set; import java.util.Set;
import java.util.function.Supplier; import java.util.function.Supplier;
public class CnFRegistries public class CharmsAndFabricRegistries
{ {
public static class Items public static class Items
{ {
@ -85,11 +85,11 @@ public class CnFRegistries
BLOCK_ENTITY_TYPES = BLOCK_ENTITY_TYPES =
DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE,
CharmsAndFabrics.MODID); CharmsAndFabrics.MODID);
public static final Supplier<BlockEntityType<FloralWorkstationBlockEntity>> public static final Supplier<BlockEntityType<FloralWorkshopBlockEntity>>
FLORAL_BLOCK_ENTITY = FLORAL_BLOCK_ENTITY =
BLOCK_ENTITY_TYPES.register("floral_blockstation_entity", BLOCK_ENTITY_TYPES.register("floral_block_entity",
() -> new BlockEntityType<>( () -> new BlockEntityType<>(
FloralWorkstationBlockEntity::new, FloralWorkshopBlockEntity::new,
Set.of(Blocks.FLORAL_WORKSTATION.get()))); Set.of(Blocks.FLORAL_WORKSTATION.get())));
} }

View file

@ -1,54 +1,25 @@
package fr.sushi.charmsnfabrics.common.block; package fr.sushi.charmsnfabrics.common.block;
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkstationBlockEntity; import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkshopBlockEntity;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.HorizontalDirectionalBlock;
import net.minecraft.world.level.block.Rotation;
import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.EnumProperty;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public class FloralWorkstation extends Block implements EntityBlock public class FloralWorkstation extends Block implements EntityBlock
{ {
public static final EnumProperty<Direction> FACING = public FloralWorkstation(Properties properties)
HorizontalDirectionalBlock.FACING;
public FloralWorkstation(BlockBehaviour.Properties properties)
{ {
super(properties); super(properties);
this.registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH));
}
@Override
protected void createBlockStateDefinition(
StateDefinition.Builder<Block, BlockState> builder)
{
builder.add(FACING);
}
@Override
public @Nullable BlockState getStateForPlacement(BlockPlaceContext ctx)
{
return this.defaultBlockState().setValue(FACING,
ctx.getHorizontalDirection().getClockWise());
}
@Override
protected BlockState rotate(BlockState state, Rotation rot)
{
return state.setValue(FACING, rot.rotate(state.getValue(FACING)));
} }
@Override @Override
public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state)
{ {
return new FloralWorkstationBlockEntity(pos, state); return new FloralWorkshopBlockEntity(pos, state);
} }
} }

View file

@ -0,0 +1,18 @@
package fr.sushi.charmsnfabrics.common.entities.block;
import fr.sushi.charmsnfabrics.common.CharmsAndFabricRegistries;
import net.minecraft.core.BlockPos;
import net.minecraft.core.HolderLookup;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
public class FloralWorkshopBlockEntity extends BlockEntity
{
public FloralWorkshopBlockEntity(BlockPos pos, BlockState blockState)
{
super(CharmsAndFabricRegistries.Entities.FLORAL_BLOCK_ENTITY.get(), pos,
blockState);
}
}

View file

@ -1,16 +0,0 @@
package fr.sushi.charmsnfabrics.common.entities.block;
import fr.sushi.charmsnfabrics.common.CnFRegistries;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
public class FloralWorkstationBlockEntity extends BlockEntity
{
public FloralWorkstationBlockEntity(BlockPos pos, BlockState blockState)
{
super(CnFRegistries.Entities.FLORAL_BLOCK_ENTITY.get(), pos,
blockState);
}
}

View file

@ -0,0 +1,7 @@
{
"variants": {
"": {
"model": "charmsnfabrics:block/floral_workstation"
}
}
}

View file

@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "charmsnfabrics:block/floral_workstation"
}
}

View file

@ -0,0 +1,6 @@
{
"model": {
"type": "minecraft:model",
"model": "charmsnfabrics:item/flower_crown"
}
}

View file

@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "charmsnfabrics:item/flower_crown"
}
}