mirror of
https://github.com/TechnoVisionDev/Forge-Modding-Tutorial-1.16
synced 2024-10-27 20:34:04 +00:00
Custom spawn eggs
This commit is contained in:
parent
4b8685de39
commit
5d48560e72
@ -4,10 +4,15 @@ import com.technovision.tutorial.entities.HogEntity;
|
||||
import com.technovision.tutorial.init.ModBlocks;
|
||||
import com.technovision.tutorial.init.ModEntityType;
|
||||
import com.technovision.tutorial.init.ModItems;
|
||||
import com.technovision.tutorial.items.ModSpawnEgg;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.ai.attributes.GlobalEntityTypeAttributes;
|
||||
import net.minecraft.item.ItemGroup;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.api.distmarker.Dist;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.event.RegistryEvent;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import net.minecraftforge.fml.DeferredWorkQueue;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
|
||||
@ -17,6 +22,7 @@ import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@Mod("tutorial")
|
||||
@Mod.EventBusSubscriber(modid = Tutorial.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
|
||||
public class Tutorial {
|
||||
|
||||
public static final Logger LOGGER = LogManager.getLogger();
|
||||
@ -49,4 +55,9 @@ public class Tutorial {
|
||||
}
|
||||
};
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onRegisterEntities(final RegistryEvent.Register<EntityType<?>> event) {
|
||||
ModSpawnEgg.initSpawnEggs();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.technovision.tutorial.init;
|
||||
|
||||
import com.technovision.tutorial.Tutorial;
|
||||
import com.technovision.tutorial.items.ModSpawnEgg;
|
||||
import com.technovision.tutorial.items.PoisonApple;
|
||||
import com.technovision.tutorial.util.enums.ModArmorMaterial;
|
||||
import com.technovision.tutorial.util.enums.ModItemTier;
|
||||
@ -16,8 +17,12 @@ public class ModItems {
|
||||
|
||||
// Items
|
||||
public static final RegistryObject<Item> RUBY = ITEMS.register("ruby", () -> new Item(new Item.Properties().group(Tutorial.TAB)));
|
||||
|
||||
public static final RegistryObject<PoisonApple> POISON_APPLE = ITEMS.register("poison_apple", PoisonApple::new);
|
||||
|
||||
public static final RegistryObject<ModSpawnEgg> HOG_SPAWN_EGG = ITEMS.register("hog_spawn_egg",
|
||||
() -> new ModSpawnEgg(ModEntityType.HOG, 0xE1A68B, 0x99593B, new Item.Properties().group(Tutorial.TAB)));
|
||||
|
||||
// Block Items
|
||||
public static final RegistryObject<Item> RUBY_BLOCK_ITEM = ITEMS.register("ruby_block",
|
||||
() -> new BlockItem(ModBlocks.RUBY_BLOCK.get(), new Item.Properties().group(Tutorial.TAB)));
|
||||
|
@ -0,0 +1,64 @@
|
||||
package com.technovision.tutorial.items;
|
||||
|
||||
import net.minecraft.block.DispenserBlock;
|
||||
import net.minecraft.dispenser.DefaultDispenseItemBehavior;
|
||||
import net.minecraft.dispenser.IBlockSource;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.SpawnReason;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.SpawnEggItem;
|
||||
import net.minecraft.nbt.CompoundNBT;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraftforge.common.util.Lazy;
|
||||
import net.minecraftforge.common.util.NonNullSupplier;
|
||||
import net.minecraftforge.fml.RegistryObject;
|
||||
import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class ModSpawnEgg extends SpawnEggItem {
|
||||
|
||||
protected static final List<ModSpawnEgg> UNADDED_EGGS = new ArrayList<ModSpawnEgg>();
|
||||
private final Lazy<? extends EntityType<?>> entityTypeSupplier;
|
||||
|
||||
public ModSpawnEgg(final NonNullSupplier<? extends EntityType<?>> entityTypeSupplier, final int primaryColour, final int secondaryColour, final Item.Properties properties) {
|
||||
super(null, primaryColour, secondaryColour, properties);
|
||||
this.entityTypeSupplier = Lazy.of(entityTypeSupplier::get);
|
||||
UNADDED_EGGS.add(this);
|
||||
}
|
||||
|
||||
public ModSpawnEgg(final RegistryObject<? extends EntityType<?>> entityTypeSupplier, final int primaryColour, final int secondaryColour, final Item.Properties properties) {
|
||||
super(null, primaryColour, secondaryColour, properties);
|
||||
this.entityTypeSupplier = Lazy.of(entityTypeSupplier::get);
|
||||
UNADDED_EGGS.add(this);
|
||||
}
|
||||
|
||||
public static void initSpawnEggs() {
|
||||
final Map<EntityType<?>, SpawnEggItem> EGGS = ObfuscationReflectionHelper.getPrivateValue(SpawnEggItem.class, null, "field_195987_b");
|
||||
DefaultDispenseItemBehavior dispenseBehaviour = new DefaultDispenseItemBehavior() {
|
||||
@Override
|
||||
protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) {
|
||||
Direction direction = source.getBlockState().get(DispenserBlock.FACING);
|
||||
EntityType<?> type = ((SpawnEggItem) stack.getItem()).getType(stack.getTag());
|
||||
type.spawn(source.getWorld(), stack, null, source.getBlockPos().offset(direction),
|
||||
SpawnReason.DISPENSER, direction != Direction.UP, false);
|
||||
stack.shrink(1);
|
||||
return stack;
|
||||
}
|
||||
};
|
||||
|
||||
for (final SpawnEggItem spawnEgg : UNADDED_EGGS) {
|
||||
EGGS.put(spawnEgg.getType(null), spawnEgg);
|
||||
DispenserBlock.registerDispenseBehavior(spawnEgg, dispenseBehaviour);
|
||||
}
|
||||
UNADDED_EGGS.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType<?> getType(CompoundNBT nbt) {
|
||||
return this.entityTypeSupplier.get();
|
||||
}
|
||||
}
|
@ -14,5 +14,6 @@
|
||||
"item.tutorial.ruby_chestplate": "Ruby Chestplate",
|
||||
"item.tutorial.ruby_leggings": "Ruby Leggings",
|
||||
"item.tutorial.ruby_boots": "Ruby Boots",
|
||||
"item.tutorial.hog_spawn_egg": "Hog Spawn Egg",
|
||||
"entity.tutorial.hog": "Hog"
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"parent": "item/template_spawn_egg"
|
||||
}
|
Loading…
Reference in New Issue
Block a user