diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/src/main/java/ley/modding/dartcraft/Dartcraft.java b/src/main/java/ley/modding/dartcraft/Dartcraft.java index d62c0a9..7d1498d 100644 --- a/src/main/java/ley/modding/dartcraft/Dartcraft.java +++ b/src/main/java/ley/modding/dartcraft/Dartcraft.java @@ -5,14 +5,20 @@ import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.registry.EntityRegistry; +import cpw.mods.fml.relauncher.Side; import ley.modding.dartcraft.block.BlockPowerOre; import ley.modding.dartcraft.block.Blocks; import ley.modding.dartcraft.event.EventHandler; import ley.modding.dartcraft.internal.Registry; +import ley.modding.dartcraft.entity.EntityColdChicken; +import ley.modding.dartcraft.entity.EntityColdCow; +import ley.modding.dartcraft.entity.EntityColdPig; import ley.modding.dartcraft.item.BaseItem; import ley.modding.dartcraft.item.Items; import ley.modding.dartcraft.item.tool.ItemForceMitts; import ley.modding.dartcraft.item.tool.ItemForcePickaxe; +import ley.modding.dartcraft.item.tool.ItemForceShears; import ley.modding.dartcraft.proxy.CommonProxy; import ley.modding.dartcraft.tab.DartcraftTab; import ley.modding.tileralib.api.IRegistry; @@ -27,6 +33,7 @@ public class Dartcraft { @Mod.Instance public static Dartcraft instance = new Dartcraft(); + public static DartcraftClient client = new DartcraftClient(); public static IRegistry registry; @SidedProxy(serverSide = "ley.modding.dartcraft.proxy.CommonProxy", clientSide = "ley.modding.dartcraft.proxy.ClientProxy") public static CommonProxy proxy; @@ -34,28 +41,35 @@ public class Dartcraft { public static CreativeTabs tab = new DartcraftTab(); @Mod.EventHandler - public void preInit(FMLPreInitializationEvent e) - { + public void preInit(FMLPreInitializationEvent e) { MinecraftForge.EVENT_BUS.register(new EventHandler()); } @Mod.EventHandler - public void init(FMLInitializationEvent e) - { + public void init(FMLInitializationEvent e) { + // TODO: use proxys + if (e.getSide() == Side.CLIENT) + client.init(); + registry = new Registry(); Items.forcegem = registry.registerItem(new BaseItem("forcegem")); Items.forceingot = registry.registerItem(new BaseItem("forceingot")); Items.forcenugget = registry.registerItem(new BaseItem("forcenugget")); Items.forcestick = registry.registerItem(new BaseItem("forcestick")); Items.forceshard = registry.registerItem(new BaseItem("forceshard")); - registry.registerItem(new ItemForcePickaxe()); - registry.registerItem(new ItemForceMitts()); + Items.forcemitts = registry.registerItem(new ItemForceMitts()); + Items.forcepickaxe = registry.registerItem(new ItemForcePickaxe()); + Items.forceshears = registry.registerItem(new ItemForceShears()); Blocks.powerore = registry.registerBlock(new BlockPowerOre()); + + int entityId = 0; + EntityRegistry.registerModEntity(EntityColdChicken.class, "coldChicken", entityId++, Dartcraft.instance, 40, 1, true); + EntityRegistry.registerModEntity(EntityColdCow.class, "coldCow", entityId++, Dartcraft.instance, 40, 1, true); + EntityRegistry.registerModEntity(EntityColdPig.class, "coldPig", entityId++, Dartcraft.instance, 40, 1, true); } @Mod.EventHandler - public void postInit(FMLPostInitializationEvent e) - { + public void postInit(FMLPostInitializationEvent e) { } diff --git a/src/main/java/ley/modding/dartcraft/DartcraftClient.java b/src/main/java/ley/modding/dartcraft/DartcraftClient.java new file mode 100644 index 0000000..a044585 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/DartcraftClient.java @@ -0,0 +1,22 @@ +package ley.modding.dartcraft; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import ley.modding.dartcraft.client.renderer.entity.RenderColdAnimal; +import ley.modding.dartcraft.entity.EntityColdChicken; +import ley.modding.dartcraft.entity.EntityColdCow; +import ley.modding.dartcraft.entity.EntityColdPig; +import net.minecraft.client.model.ModelChicken; +import net.minecraft.client.model.ModelCow; +import net.minecraft.client.model.ModelPig; + +class DartcraftClient { + public void init() { + renderEntities(); + } + + public void renderEntities() { + RenderingRegistry.registerEntityRenderingHandler(EntityColdChicken.class, new RenderColdAnimal(new ModelChicken(), 0.6f, "textures/entity/coldChicken.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityColdCow.class, new RenderColdAnimal(new ModelCow(), 0.6f, "textures/entity/coldCow.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityColdPig.class, new RenderColdAnimal(new ModelPig(), 0.6f, "textures/entity/coldPig.png")); + } +} diff --git a/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderColdAnimal.java b/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderColdAnimal.java new file mode 100644 index 0000000..0767161 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderColdAnimal.java @@ -0,0 +1,24 @@ +package ley.modding.dartcraft.client.renderer.entity; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +@SideOnly(Side.CLIENT) +public class RenderColdAnimal extends RenderLiving { + private final ResourceLocation texture; + + public RenderColdAnimal(ModelBase par1ModelBase, float par2, String textureLocation) { + super(par1ModelBase, par2); + + this.texture = new ResourceLocation("dartcraft", textureLocation); + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return texture; + } +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityColdChicken.java b/src/main/java/ley/modding/dartcraft/entity/EntityColdChicken.java new file mode 100644 index 0000000..436963a --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityColdChicken.java @@ -0,0 +1,10 @@ +package ley.modding.dartcraft.entity; + +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.world.World; + +public class EntityColdChicken extends EntityChicken { + public EntityColdChicken(World world) { + super(world); + } +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityColdCow.java b/src/main/java/ley/modding/dartcraft/entity/EntityColdCow.java new file mode 100644 index 0000000..5f80dc7 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityColdCow.java @@ -0,0 +1,10 @@ +package ley.modding.dartcraft.entity; + +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.world.World; + +public class EntityColdCow extends EntityCow { + public EntityColdCow(World world) { + super(world); + } +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityColdPig.java b/src/main/java/ley/modding/dartcraft/entity/EntityColdPig.java new file mode 100644 index 0000000..f831aac --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityColdPig.java @@ -0,0 +1,10 @@ +package ley.modding.dartcraft.entity; + +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.world.World; + +public class EntityColdPig extends EntityPig { + public EntityColdPig(World world) { + super(world); + } +} diff --git a/src/main/java/ley/modding/dartcraft/event/EventHandler.java b/src/main/java/ley/modding/dartcraft/event/EventHandler.java index f0475d4..5c3acce 100644 --- a/src/main/java/ley/modding/dartcraft/event/EventHandler.java +++ b/src/main/java/ley/modding/dartcraft/event/EventHandler.java @@ -3,8 +3,18 @@ package ley.modding.dartcraft.event; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import ley.modding.dartcraft.Dartcraft; import ley.modding.dartcraft.api.IBreakable; +import ley.modding.dartcraft.entity.EntityColdChicken; +import ley.modding.dartcraft.entity.EntityColdCow; +import ley.modding.dartcraft.entity.EntityColdPig; +import ley.modding.dartcraft.item.Items; +import net.minecraft.entity.passive.EntityAnimal; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityPig; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.event.entity.player.EntityInteractEvent; import net.minecraftforge.event.entity.player.PlayerDestroyItemEvent; public class EventHandler { @@ -21,4 +31,106 @@ public class EventHandler { } } + @SubscribeEvent + public void onEntityInteract(EntityInteractEvent event) { + if (!Dartcraft.proxy.isSimulating(event.target.worldObj)) + return; + + ItemStack heldItem = event.entityPlayer.getHeldItem(); + if (heldItem != null && heldItem.getItem() != Items.forceshears) + return; + + if (event.target instanceof EntityAnimal) { + EntityAnimal entity = (EntityAnimal)event.target; + ColdEntityType type = ColdEntityType.fromClass(entity.getClass()); + + if (type == null) + return; + + EntityAnimal newEntity = type.newInstance(entity.worldObj); + + double x = entity.posX; + double y = entity.posY; + double z = entity.posZ; + float pitch = entity.rotationPitch; + float yaw = entity.rotationYaw; + float camPitch = entity.cameraPitch; + float health = entity.getHealth(); + float fall = entity.fallDistance; + boolean onFire = entity.isBurning(); + int air = entity.getAir(); + float speed = entity.getAIMoveSpeed(); + + World world = entity.worldObj; + + entity.entityDropItem(type.getDrop(), 1.0f); + world.playSoundAtEntity(entity, "random.pop", 1.0f, 1.0f); + entity.setDead(); + world.removeEntity(entity); + + newEntity.setPositionAndRotation(x, y, z, yaw, pitch); + newEntity.cameraPitch = camPitch; + newEntity.setHealth(health); + newEntity.fallDistance = fall; + if (onFire) + newEntity.setFire(1); + newEntity.setAir(air); + newEntity.setAIMoveSpeed(speed); + + world.spawnEntityInWorld(newEntity); + } + } + + enum ColdEntityType { + COW(EntityCow.class), + CHICKEN(EntityChicken.class), + PIG(EntityPig.class); + + ColdEntityType(Class clazz) { + this.clazz = clazz; + } + + Class clazz; + + static ColdEntityType fromClass(Class clazz) { + for (ColdEntityType v : ColdEntityType.values()) { + if (v.clazz == clazz) { + return v; + } + } + return null; + } + + EntityAnimal newInstance(World world) { + switch (this) { + case COW: + return new EntityColdCow(world); + case PIG: + return new EntityColdPig(world); + case CHICKEN: + return new EntityColdChicken(world); + + // why is the compiler so stupid to think that this is required? + default: + return null; + } + } + + ItemStack getDrop() { + // gotta use full names here, because tilera had the brilliant idea to call the mod item class "Items" + switch (this) { + case COW: + return new ItemStack(net.minecraft.init.Items.leather); + case PIG: + // TODO: add bacon item + return new ItemStack(net.minecraft.init.Items.porkchop); + case CHICKEN: + return new ItemStack(net.minecraft.init.Items.feather); + + // why is the compiler so stupid to think that this is required? + default: + return null; + } + } + } } diff --git a/src/main/java/ley/modding/dartcraft/item/BaseItem.java b/src/main/java/ley/modding/dartcraft/item/BaseItem.java index c74cde7..328c655 100644 --- a/src/main/java/ley/modding/dartcraft/item/BaseItem.java +++ b/src/main/java/ley/modding/dartcraft/item/BaseItem.java @@ -1,13 +1,12 @@ package ley.modding.dartcraft.item; import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.util.Util; import net.minecraft.item.Item; public class BaseItem extends Item { public BaseItem(String id) { - setUnlocalizedName(id); - setTextureName(Dartcraft.MODID + ":" + id); - setCreativeTab(Dartcraft.tab); + Util.configureItem(this, id); } } diff --git a/src/main/java/ley/modding/dartcraft/item/Items.java b/src/main/java/ley/modding/dartcraft/item/Items.java index e367973..384eb43 100644 --- a/src/main/java/ley/modding/dartcraft/item/Items.java +++ b/src/main/java/ley/modding/dartcraft/item/Items.java @@ -9,5 +9,8 @@ public class Items { public static Item forcenugget; public static Item forcestick; public static Item forceshard; + public static Item forceshears; + public static Item forcepickaxe; + public static Item forcemitts; } diff --git a/src/main/java/ley/modding/dartcraft/item/tool/ItemForcePickaxe.java b/src/main/java/ley/modding/dartcraft/item/tool/ItemForcePickaxe.java index 275c04a..d245e98 100644 --- a/src/main/java/ley/modding/dartcraft/item/tool/ItemForcePickaxe.java +++ b/src/main/java/ley/modding/dartcraft/item/tool/ItemForcePickaxe.java @@ -7,6 +7,7 @@ import ley.modding.dartcraft.api.IBreakable; import ley.modding.dartcraft.api.IForceConsumer; import ley.modding.dartcraft.item.Items; import ley.modding.dartcraft.util.ForceConsumerUtils; +import ley.modding.dartcraft.util.Util; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumRarity; @@ -28,9 +29,7 @@ public class ItemForcePickaxe extends ItemPickaxe implements IBreakable, IForceC public ItemForcePickaxe() { super(material); - setUnlocalizedName("forcepickaxe"); - setTextureName(Dartcraft.MODID + ":forcepickaxe"); - setCreativeTab(Dartcraft.tab); + Util.configureItem(this, "forcepickaxe"); } @Override diff --git a/src/main/java/ley/modding/dartcraft/item/tool/ItemForceShears.java b/src/main/java/ley/modding/dartcraft/item/tool/ItemForceShears.java new file mode 100644 index 0000000..14ee6ae --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/item/tool/ItemForceShears.java @@ -0,0 +1,47 @@ +package ley.modding.dartcraft.item.tool; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBreakable; +import ley.modding.dartcraft.api.IForceConsumer; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.ForceConsumerUtils; +import ley.modding.dartcraft.util.Util; +import net.minecraft.item.ItemShears; +import net.minecraft.item.ItemStack; + +public class ItemForceShears extends ItemShears implements IBreakable, IForceConsumer { + public ItemForceShears() { + super(); + Util.configureItem(this, "forceshears"); + } + + @Override + public ItemStack itemReturned() { + return new ItemStack(Items.forceshard); + } + + @Override + public int getStored(ItemStack stack) { + return ForceConsumerUtils.getStoredForce(stack); + } + + @Override + public int getMaxStored(ItemStack stack) { + return 10000; + } + + @Override + public int amountUsedBase(ItemStack stack) { + return 0; + } + + @Override + public boolean useForce(ItemStack stack, int var2, boolean var3) { + return false; + } + + @Override + public boolean attemptRepair(ItemStack stack) { + return ForceConsumerUtils.attemptRepair(stack); + } +} diff --git a/src/main/java/ley/modding/dartcraft/util/Util.java b/src/main/java/ley/modding/dartcraft/util/Util.java new file mode 100644 index 0000000..7f60de6 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/util/Util.java @@ -0,0 +1,12 @@ +package ley.modding.dartcraft.util; + +import ley.modding.dartcraft.Dartcraft; +import net.minecraft.item.Item; + +public class Util { + public static void configureItem(Item item, String id) { + item.setUnlocalizedName(id); + item.setTextureName(Dartcraft.MODID + ":" + id); + item.setCreativeTab(Dartcraft.tab); + } +} diff --git a/src/main/resources/assets/dartcraft/lang/en_US.lang b/src/main/resources/assets/dartcraft/lang/en_US.lang index 49c4ce1..29fb5b1 100644 --- a/src/main/resources/assets/dartcraft/lang/en_US.lang +++ b/src/main/resources/assets/dartcraft/lang/en_US.lang @@ -4,5 +4,6 @@ item.forcenugget.name=Force Nugget item.forcestick.name=Force Stick item.forceshard.name=Force Shard item.forcemitts.name=Force Mitts +item.forceshears.name=Force Shears itemGroup.dartcraft=Dartcraft diff --git a/src/main/resources/assets/dartcraft/textures/entity/coldChicken.png b/src/main/resources/assets/dartcraft/textures/entity/coldChicken.png new file mode 100644 index 0000000..ed40450 Binary files /dev/null and b/src/main/resources/assets/dartcraft/textures/entity/coldChicken.png differ diff --git a/src/main/resources/assets/dartcraft/textures/entity/coldCow.png b/src/main/resources/assets/dartcraft/textures/entity/coldCow.png new file mode 100644 index 0000000..b2e638d Binary files /dev/null and b/src/main/resources/assets/dartcraft/textures/entity/coldCow.png differ diff --git a/src/main/resources/assets/dartcraft/textures/entity/coldPig.png b/src/main/resources/assets/dartcraft/textures/entity/coldPig.png new file mode 100644 index 0000000..0052eb7 Binary files /dev/null and b/src/main/resources/assets/dartcraft/textures/entity/coldPig.png differ diff --git a/src/main/resources/assets/dartcraft/textures/items/forceshears.png b/src/main/resources/assets/dartcraft/textures/items/forceshears.png new file mode 100644 index 0000000..3712f9c Binary files /dev/null and b/src/main/resources/assets/dartcraft/textures/items/forceshears.png differ