package com.thebrokenrail.slightlyvanilla; import com.thebrokenrail.slightlyvanilla.entity.SlimeballEntity; import com.thebrokenrail.slightlyvanilla.entity.SpawnEggEntity; import me.sargunvohra.mcmods.autoconfig1u.AutoConfig; import me.sargunvohra.mcmods.autoconfig1u.serializer.GsonConfigSerializer; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.entity.FabricEntityTypeBuilder; import net.minecraft.block.DispenserBlock; import net.minecraft.block.dispenser.DispenserBehavior; import net.minecraft.block.dispenser.ItemDispenserBehavior; import net.minecraft.block.dispenser.ProjectileDispenserBehavior; import net.minecraft.entity.EntityCategory; import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.EntityType; import net.minecraft.entity.projectile.ProjectileEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.util.Identifier; import net.minecraft.util.math.BlockPointer; import net.minecraft.util.math.Position; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; public class SlightlyVanilla implements ModInitializer { public static final String NAMESPACE = "slightlyvanilla"; public static EntityType SLIMEBALL_ENTITY; public static EntityType SPAWN_EGG_ENTITY; public static ModConfig getConfig() { return AutoConfig.getConfigHolder(ModConfig.class).getConfig(); } @Override public void onInitialize() { AutoConfig.register(ModConfig.class, GsonConfigSerializer::new); SLIMEBALL_ENTITY = FabricEntityTypeBuilder.create(EntityCategory.MISC, (EntityType.EntityFactory) SlimeballEntity::new).size(EntityDimensions.fixed(0.25f, 0.25f)).build(); SPAWN_EGG_ENTITY = FabricEntityTypeBuilder.create(EntityCategory.MISC, (EntityType.EntityFactory) SpawnEggEntity::new).size(EntityDimensions.fixed(0.25f, 0.25f)).build(); Registry.register(Registry.ENTITY_TYPE, new Identifier(NAMESPACE, "slimeball"), SLIMEBALL_ENTITY); Registry.register(Registry.ENTITY_TYPE, new Identifier(NAMESPACE, "spawn_egg"), SPAWN_EGG_ENTITY); DispenserBlock.registerBehavior(Items.SLIME_BALL, (pointer, stack) -> { if (getConfig().throwableSlimeballs) { return new ProjectileDispenserBehavior() { @Override protected ProjectileEntity createProjectile(World position, Position stack, ItemStack itemStack) { SlimeballEntity entity = new SlimeballEntity(position, stack.getX(), stack.getY(), stack.getZ()); entity.setItem(itemStack); return entity; } }.dispense(pointer, stack); } else { return new ItemDispenserBehavior().dispense(pointer, stack); } }); } }