add force shears

This commit is contained in:
LordMZTE 2021-04-04 14:13:53 +02:00
parent 28489f4c26
commit da5208c87c
18 changed files with 277 additions and 14 deletions

0
gradlew vendored Normal file → Executable file
View File

View File

@ -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) {
}

View File

@ -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"));
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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<? extends EntityAnimal> clazz) {
this.clazz = clazz;
}
Class<? extends EntityAnimal> 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;
}
}
}
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB