Compare commits
2 commits
33e659fa47
...
aa5adbd59e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
aa5adbd59e | ||
![]() |
b91e4aae21 |
14 changed files with 131 additions and 90 deletions
|
@ -1,38 +1,17 @@
|
|||
package fr.sushi.charmsnfabrics;
|
||||
|
||||
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 fr.sushi.charmsnfabrics.common.CnFRegistries;
|
||||
import net.neoforged.bus.api.IEventBus;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.Mod;
|
||||
import net.neoforged.fml.config.ModConfig;
|
||||
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)
|
||||
public class CharmsAndFabrics {
|
||||
public static final String MODID = "charmsnfabrics";
|
||||
|
||||
public CharmsAndFabrics(IEventBus modEventBus, ModContainer modContainer) {
|
||||
CharmsAndFabricRegistries.register(modEventBus);
|
||||
CnFRegistries.register(modEventBus);
|
||||
|
||||
modContainer.registerConfig(ModConfig.Type.COMMON, Config.SPEC);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
package fr.sushi.charmsnfabrics.client;
|
||||
|
||||
import fr.sushi.charmsnfabrics.CharmsAndFabrics;
|
||||
import fr.sushi.charmsnfabrics.client.datagen.CnFModelProvider;
|
||||
import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel;
|
||||
import fr.sushi.charmsnfabrics.client.renderer.FloralWorkstationRenderer;
|
||||
import fr.sushi.charmsnfabrics.client.renderer.FlowerCrownRenderer;
|
||||
import fr.sushi.charmsnfabrics.common.CharmsAndFabricRegistries;
|
||||
import fr.sushi.charmsnfabrics.common.CnFRegistries;
|
||||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.ModContainer;
|
||||
|
@ -14,13 +15,14 @@ import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
|
|||
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
|
||||
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;
|
||||
|
||||
@Mod(value = CharmsAndFabrics.MODID, dist = Dist.CLIENT)
|
||||
@EventBusSubscriber(modid = CharmsAndFabrics.MODID, value = Dist.CLIENT)
|
||||
public class CharmsFabricsClient
|
||||
public class CnFClient
|
||||
{
|
||||
public CharmsFabricsClient(ModContainer container)
|
||||
public CnFClient(ModContainer container)
|
||||
{
|
||||
container.registerExtensionPoint(IConfigScreenFactory.class,
|
||||
ConfigurationScreen::new);
|
||||
|
@ -30,7 +32,7 @@ public class CharmsFabricsClient
|
|||
private static void onClientSetup(final FMLClientSetupEvent event)
|
||||
{
|
||||
ICurioRenderer.register(
|
||||
CharmsAndFabricRegistries.Items.FLOWER_CROWN.get(),
|
||||
CnFRegistries.Items.FLOWER_CROWN.get(),
|
||||
FlowerCrownRenderer::new);
|
||||
}
|
||||
|
||||
|
@ -38,7 +40,7 @@ public class CharmsFabricsClient
|
|||
private static void onRegisterLayerDefinitions(
|
||||
final EntityRenderersEvent.RegisterLayerDefinitions event)
|
||||
{
|
||||
event.registerLayerDefinition(CharmsAndFabricsLayers.CROWN_LAYER,
|
||||
event.registerLayerDefinition(CnFLayers.CROWN_LAYER,
|
||||
FlowerCrownModel::createLayer);
|
||||
}
|
||||
|
||||
|
@ -47,7 +49,12 @@ public class CharmsFabricsClient
|
|||
final EntityRenderersEvent.RegisterRenderers event)
|
||||
{
|
||||
event.registerBlockEntityRenderer(
|
||||
CharmsAndFabricRegistries.Entities.FLORAL_BLOCK_ENTITY.get(),
|
||||
CnFRegistries.Entities.FLORAL_BLOCK_ENTITY.get(),
|
||||
FloralWorkstationRenderer::new);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
private static void onGatherClientData(final GatherDataEvent.Client event) {
|
||||
event.createProvider(CnFModelProvider::new);
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ import fr.sushi.charmsnfabrics.CharmsAndFabrics;
|
|||
import net.minecraft.client.model.geom.ModelLayerLocation;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
|
||||
public class CharmsAndFabricsLayers
|
||||
public class CnFLayers
|
||||
{
|
||||
public static final ModelLayerLocation CROWN_LAYER = new ModelLayerLocation(
|
||||
ResourceLocation.fromNamespaceAndPath(CharmsAndFabrics.MODID,
|
|
@ -0,0 +1,53 @@
|
|||
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);
|
||||
}
|
||||
}
|
|
@ -3,9 +3,9 @@ package fr.sushi.charmsnfabrics.client.renderer;
|
|||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import fr.sushi.charmsnfabrics.CharmsAndFabrics;
|
||||
import fr.sushi.charmsnfabrics.client.CharmsAndFabricsLayers;
|
||||
import fr.sushi.charmsnfabrics.client.CnFLayers;
|
||||
import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel;
|
||||
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkshopBlockEntity;
|
||||
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkstationBlockEntity;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
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.world.phys.Vec3;
|
||||
|
||||
public class FloralWorkstationRenderer implements BlockEntityRenderer<FloralWorkshopBlockEntity>
|
||||
public class FloralWorkstationRenderer implements BlockEntityRenderer<FloralWorkstationBlockEntity>
|
||||
{
|
||||
private final FlowerCrownModel model;
|
||||
|
||||
public FloralWorkstationRenderer(BlockEntityRendererProvider.Context ctx)
|
||||
{
|
||||
this.model = new FlowerCrownModel(
|
||||
ctx.bakeLayer(CharmsAndFabricsLayers.CROWN_LAYER));
|
||||
ctx.bakeLayer(CnFLayers.CROWN_LAYER));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(FloralWorkshopBlockEntity blockEntity, float partialTick,
|
||||
public void render(FloralWorkstationBlockEntity blockEntity, float partialTick,
|
||||
PoseStack poseStack, MultiBufferSource bufferSource,
|
||||
int packedLight, int packedOverlay, Vec3 cameraPos)
|
||||
{
|
||||
|
|
|
@ -2,7 +2,7 @@ package fr.sushi.charmsnfabrics.client.renderer;
|
|||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import fr.sushi.charmsnfabrics.client.CharmsAndFabricsLayers;
|
||||
import fr.sushi.charmsnfabrics.client.CnFLayers;
|
||||
import fr.sushi.charmsnfabrics.client.model.FlowerCrownModel;
|
||||
import fr.sushi.charmsnfabrics.common.item.FlowerCrown;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -28,7 +28,7 @@ public class FlowerCrownRenderer implements ICurioRenderer
|
|||
{
|
||||
this.model = new FlowerCrownModel(
|
||||
Minecraft.getInstance().getEntityModels()
|
||||
.bakeLayer(CharmsAndFabricsLayers.CROWN_LAYER));
|
||||
.bakeLayer(CnFLayers.CROWN_LAYER));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,7 @@ package fr.sushi.charmsnfabrics.common;
|
|||
|
||||
import fr.sushi.charmsnfabrics.CharmsAndFabrics;
|
||||
import fr.sushi.charmsnfabrics.common.block.FloralWorkstation;
|
||||
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkshopBlockEntity;
|
||||
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkstationBlockEntity;
|
||||
import fr.sushi.charmsnfabrics.common.item.FlowerCrown;
|
||||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
@ -23,7 +23,7 @@ import net.neoforged.neoforge.registries.DeferredRegister;
|
|||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class CharmsAndFabricRegistries
|
||||
public class CnFRegistries
|
||||
{
|
||||
public static class Items
|
||||
{
|
||||
|
@ -85,11 +85,11 @@ public class CharmsAndFabricRegistries
|
|||
BLOCK_ENTITY_TYPES =
|
||||
DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE,
|
||||
CharmsAndFabrics.MODID);
|
||||
public static final Supplier<BlockEntityType<FloralWorkshopBlockEntity>>
|
||||
public static final Supplier<BlockEntityType<FloralWorkstationBlockEntity>>
|
||||
FLORAL_BLOCK_ENTITY =
|
||||
BLOCK_ENTITY_TYPES.register("floral_block_entity",
|
||||
BLOCK_ENTITY_TYPES.register("floral_blockstation_entity",
|
||||
() -> new BlockEntityType<>(
|
||||
FloralWorkshopBlockEntity::new,
|
||||
FloralWorkstationBlockEntity::new,
|
||||
Set.of(Blocks.FLORAL_WORKSTATION.get())));
|
||||
}
|
||||
|
|
@ -1,25 +1,54 @@
|
|||
package fr.sushi.charmsnfabrics.common.block;
|
||||
|
||||
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkshopBlockEntity;
|
||||
import fr.sushi.charmsnfabrics.common.entities.block.FloralWorkstationBlockEntity;
|
||||
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.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.state.BlockBehaviour;
|
||||
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;
|
||||
|
||||
public class FloralWorkstation extends Block implements EntityBlock
|
||||
{
|
||||
public FloralWorkstation(Properties properties)
|
||||
public static final EnumProperty<Direction> FACING =
|
||||
HorizontalDirectionalBlock.FACING;
|
||||
|
||||
public FloralWorkstation(BlockBehaviour.Properties 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
|
||||
public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state)
|
||||
{
|
||||
return new FloralWorkshopBlockEntity(pos, state);
|
||||
return new FloralWorkstationBlockEntity(pos, state);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
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);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
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);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
"variants": {
|
||||
"": {
|
||||
"model": "charmsnfabrics:block/floral_workstation"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"model": {
|
||||
"type": "minecraft:model",
|
||||
"model": "charmsnfabrics:block/floral_workstation"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"model": {
|
||||
"type": "minecraft:model",
|
||||
"model": "charmsnfabrics:item/flower_crown"
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
"parent": "minecraft:item/generated",
|
||||
"textures": {
|
||||
"layer0": "charmsnfabrics:item/flower_crown"
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue