Custom spawn eggs

master
TechnoVisionDev 4 years ago
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…
Cancel
Save