Skip to content

Commit

Permalink
Forge version fully done
Browse files Browse the repository at this point in the history
Fabric version mostly done, just need mob spawning
  • Loading branch information
GirafiStudios committed Dec 12, 2023
1 parent ecfbb2e commit 71dca47
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 12 deletions.
2 changes: 2 additions & 0 deletions common/src/main/java/com/girafi/waddles/CommonClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import com.girafi.waddles.init.PenguinRegistry;
import com.girafi.waddles.init.WaddlesSounds;
import com.girafi.waddles.utils.WaddlesTags;

public class CommonClass {

public static void init() {
WaddlesTags.load();
WaddlesSounds.load();
PenguinRegistry.load();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ public static TagKey<Biome> biomeTag(String name) {
return TagKey.create(Registries.BIOME, new ResourceLocation(Constants.MOD_ID, name));
}

public static void init() {
}
public static void load() {}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{
"values": [
"#forge:is_snowy",
{
"id": "#forge:is_snowy",
"required": false
},
{
"id": "#c:snowy",
"required": false
Expand Down
45 changes: 45 additions & 0 deletions fabric/src/main/java/com/girafi/waddles/Waddles.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,60 @@
package com.girafi.waddles;

import com.girafi.waddles.entity.AdeliePenguinEntity;
import com.girafi.waddles.utils.ConfigurationHandler;
import fuzs.forgeconfigapiport.api.config.v3.ForgeConfigRegistry;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
import net.minecraft.core.Direction;
import net.minecraft.core.Registry;
import net.minecraft.core.dispenser.DispenseItemBehavior;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.item.*;
import net.minecraft.world.level.block.DispenserBlock;
import net.minecraft.world.level.gameevent.GameEvent;
import net.neoforged.fml.config.ModConfig;

import java.util.function.Supplier;

import static com.girafi.waddles.init.PenguinRegistry.*;

public class Waddles implements ModInitializer {
private static final DispenseItemBehavior DEFAULT_DISPENSE_BEHAVIOR = (source, stack) -> {
Direction face = source.state().getValue(DispenserBlock.FACING);
EntityType<?> type = ((SpawnEggItem) stack.getItem()).getType(stack.getTag());

try {
type.spawn(source.level(), stack, null, source.pos().relative(face), MobSpawnType.DISPENSER, face != Direction.UP, false);
} catch (Exception exception) {
DispenseItemBehavior.LOGGER.error("Error while dispensing spawn egg from dispenser at {}", source.pos(), exception);
return ItemStack.EMPTY;
}

stack.shrink(1);
source.level().gameEvent(GameEvent.ENTITY_PLACE, source.pos(), GameEvent.Context.of(source.state()));
return stack;
}; //TODO Spawn Placement

@Override
public void onInitialize() {
CommonClass.init();
ForgeConfigRegistry.INSTANCE.register(Constants.MOD_ID, ModConfig.Type.COMMON, ConfigurationHandler.spec);

register();
}

public void register() {
PENGUINS.forEach((penguin, name) -> {
Item spawnEgg = Registry.register(BuiltInRegistries.ITEM, new ResourceLocation(Constants.MOD_ID,name + "_spawn_egg"), new SpawnEggItem(penguin.get(), PENGUIN_EGG_PRIMARY.get(penguin), PENGUIN_EGG_SECONDARY.get(penguin), new Item.Properties()));
FabricDefaultAttributeRegistry.register(penguin.get(), AdeliePenguinEntity.createAttributes());
DispenserBlock.registerBehavior(spawnEgg, DEFAULT_DISPENSE_BEHAVIOR);
ItemGroupEvents.modifyEntriesEvent(CreativeModeTabs.SPAWN_EGGS).register(content -> content.accept(spawnEgg));
});

//PenguinSpawn.BIOME_MODIFIER_SERIALIZERS_DEFERRED.register("penguin_spawn", PenguinSpawn.PenguinBiomeModifier::makeCodec); //TODO Figure out how to do mob spawns in Fabric
}
}
17 changes: 17 additions & 0 deletions fabric/src/main/java/com/girafi/waddles/client/ClientHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.girafi.waddles.client;

import com.girafi.waddles.client.model.PenguinModel;
import com.girafi.waddles.client.renderer.PenguinRenderer;
import com.girafi.waddles.init.PenguinRegistry;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;

public class ClientHandler implements ClientModInitializer {

@Override
public void onInitializeClient() {
EntityRendererRegistry.register(PenguinRegistry.ADELIE_PENGUIN.get(), PenguinRenderer::new);
EntityModelLayerRegistry.registerModelLayer(ClientHelper.PENGUIN_LAYER, PenguinModel::createBodyLayer);
}
}
3 changes: 3 additions & 0 deletions fabric/src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
"entrypoints": {
"main": [
"com.girafi.waddles.Waddles"
],
"client": [
"com.girafi.waddles.client.ClientHandler"
]
},
"mixins": [
Expand Down
5 changes: 1 addition & 4 deletions forge/src/main/java/com/girafi/waddles/PenguinSpawn.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,17 @@
import com.mojang.serialization.codecs.RecordCodecBuilder;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.MobSpawnSettings;
import net.minecraftforge.common.world.BiomeModifier;
import net.minecraftforge.common.world.ModifiableBiomeInfo;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class PenguinSpawn {
public static final DeferredRegister<Codec<? extends BiomeModifier>> BIOME_MODIFIER_SERIALIZERS_DEFERRED = DeferredRegister.create(ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, Constants.MOD_ID);

public record PenguinBiomeModifier(HolderSet<Biome> includeList, HolderSet<Biome> excludeList, MobSpawnSettings.SpawnerData spawn) implements BiomeModifier {
private static final RegistryObject<Codec<? extends BiomeModifier>> SERIALIZER = RegistryObject.create(new ResourceLocation(Constants.MOD_ID, "penguin_spawn_serializer"), ForgeRegistries.Keys.BIOME_MODIFIER_SERIALIZERS, Constants.MOD_ID);

@Override
public void modify(Holder<Biome> biome, Phase phase, ModifiableBiomeInfo.BiomeInfo.Builder builder) {
Expand All @@ -28,7 +25,7 @@ public void modify(Holder<Biome> biome, Phase phase, ModifiableBiomeInfo.BiomeIn

@Override
public Codec<? extends BiomeModifier> codec() {
return SERIALIZER.get();
return makeCodec();
}

public static Codec<PenguinBiomeModifier> makeCodec() {
Expand Down
26 changes: 22 additions & 4 deletions forge/src/main/java/com/girafi/waddles/Waddles.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
import com.girafi.waddles.init.PenguinRegistry;
import net.minecraft.world.entity.SpawnPlacements;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.levelgen.Heightmap;
import net.minecraftforge.common.ForgeSpawnEggItem;
import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.event.entity.SpawnPlacementRegisterEvent;
Expand All @@ -14,33 +16,49 @@
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;

import java.util.function.Supplier;

import static com.girafi.waddles.init.PenguinRegistry.*;

@Mod(value = Constants.MOD_ID)
public class Waddles {
public static final DeferredRegister<Item> ITEM_DEFERRED = DeferredRegister.create(ForgeRegistries.ITEMS, Constants.MOD_ID);

public Waddles() {
CommonClass.init();
final IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
eventBus.addListener(this::setupCommon);
eventBus.addListener(this::setupClient);
PenguinSpawn.BIOME_MODIFIER_SERIALIZERS_DEFERRED.register("penguin_spawn", PenguinSpawn.PenguinBiomeModifier::makeCodec);

//ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ConfigurationHandler.spec); //TODO Figure out how to do config for Forge
//ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, ConfigurationHandler.spec); //Uncomment when building, otherwise have it commented out.

registerDeferredRegistries(eventBus);
register();
}

public void setupCommon(final FMLCommonSetupEvent event) {
}

public void setupClient(final FMLClientSetupEvent event) {
}

public void register() {
PENGUINS.forEach((penguin, name) -> {
Supplier<Item> spawnEgg = ITEM_DEFERRED.register(name + "_spawn_egg", () -> new ForgeSpawnEggItem(penguin, PENGUIN_EGG_PRIMARY.get(penguin), PENGUIN_EGG_SECONDARY.get(penguin), new Item.Properties()));
SPAWN_EGGS.add(spawnEgg);
});
PenguinSpawn.BIOME_MODIFIER_SERIALIZERS_DEFERRED.register("penguin_spawn", PenguinSpawn.PenguinBiomeModifier::makeCodec);
}

public static void registerDeferredRegistries(IEventBus modBus) {
PenguinSpawn.BIOME_MODIFIER_SERIALIZERS_DEFERRED.register(modBus);
ITEM_DEFERRED.register(modBus);
}

@Mod.EventBusSubscriber(modid = Constants.MOD_ID)
@Mod.EventBusSubscriber(modid = Constants.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
public static class Events {
@SubscribeEvent
public static void registerSpawnPlacements(SpawnPlacementRegisterEvent event) {
Expand All @@ -56,7 +74,7 @@ public static void addEntityAttributes(EntityAttributeCreationEvent event) {
@SubscribeEvent
public static void addToCreativeTab(BuildCreativeModeTabContentsEvent event) {
if (event.getTabKey() == CreativeModeTabs.SPAWN_EGGS) {
PenguinRegistry.SPAWN_EGGS.forEach(event::accept);
PenguinRegistry.SPAWN_EGGS.forEach(stack -> event.accept(stack.get()));
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"type": "waddles:adelie_penguin",
"weight": 10,
"minCount": 1,
"maxCount": 4
"maxCount": 5
},
"includeBiomes": "#waddles:spawn_include",
"excludeBiomes": "#waddles:spawn_exclude"
Expand Down

0 comments on commit 71dca47

Please sign in to comment.