You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
4.3 KiB
Java
118 lines
4.3 KiB
Java
package com.zivilon.cinder_loe.mixins;
|
|
|
|
import com.zivilon.cinder_loe.CinderLoE;
|
|
import lotr.common.LOTRMod;
|
|
import lotr.common.entity.npc.LOTREntityNPCRideable;
|
|
import lotr.common.entity.npc.LOTREntityWarg;
|
|
import net.minecraft.entity.Entity;
|
|
import net.minecraft.entity.SharedMonsterAttributes;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.world.World;
|
|
import org.spongepowered.asm.mixin.Mixin;
|
|
import org.spongepowered.asm.mixin.Overwrite;
|
|
import org.spongepowered.asm.mixin.injection.At;
|
|
import org.spongepowered.asm.mixin.injection.Inject;
|
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|
import org.spongepowered.asm.mixin.Shadow;
|
|
import lotr.common.entity.animal.LOTREntityHorse;
|
|
import lotr.common.enchant.LOTREnchantment;
|
|
import lotr.common.enchant.LOTREnchantmentHelper;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.item.ItemStack;
|
|
import lotr.common.item.LOTRItemArmor;
|
|
|
|
import java.util.Random;
|
|
|
|
|
|
@Mixin(LOTREntityWarg.class)
|
|
public abstract class MixinLOTREntityWarg extends LOTREntityNPCRideable {
|
|
|
|
public MixinLOTREntityWarg(World worldIn) {
|
|
super(worldIn);
|
|
}
|
|
|
|
/**
|
|
* @author KeyLime17
|
|
* @reason Mevans
|
|
*/
|
|
|
|
@Shadow
|
|
public abstract LOTREntityWarg.WargType getWargType();
|
|
|
|
@Overwrite(remap = false)
|
|
protected void applyEntityAttributes() {
|
|
super.applyEntityAttributes();
|
|
this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue((double) MathHelper.getRandomIntegerInRange((Random)this.rand, (int)20, (int)40));
|
|
this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(32.0);
|
|
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.22);
|
|
this.getEntityAttribute(npcAttackDamage).setBaseValue((double)MathHelper.getRandomIntegerInRange((Random)this.rand, (int)3, (int)5));
|
|
}
|
|
|
|
@Overwrite(remap = false)
|
|
protected void func_70628_a(boolean flag, int i) {
|
|
Item furItem = null;
|
|
int furMeta = 0;
|
|
switch(getWargType().wargID) {
|
|
case 0:
|
|
furItem = LOTRMod.fur;
|
|
break;
|
|
case 1:
|
|
furItem = CinderLoE.cinderFurItem;
|
|
break;
|
|
case 2:
|
|
furItem = CinderLoE.cinderFurItem;
|
|
furMeta = 1;
|
|
break;
|
|
case 3:
|
|
furItem = CinderLoE.cinderFurItem;
|
|
furMeta = 2;
|
|
break;
|
|
case 4:
|
|
furItem = CinderLoE.cinderFurItem;
|
|
furMeta = 0; // Needs ice fur to be added
|
|
break;
|
|
case 5:
|
|
furItem = CinderLoE.cinderFurItem;
|
|
furMeta = 3;
|
|
break;
|
|
case 6:
|
|
furItem = CinderLoE.cinderFurItem;
|
|
furMeta = 0; // Needs fire fur to be added
|
|
break;
|
|
}
|
|
|
|
int furs = 1 + this.rand.nextInt(3) + this.rand.nextInt(i + 1);
|
|
for (int l = 0; l < furs; l++)
|
|
entityDropItem(new ItemStack(furItem, 1, furMeta), 0.0F);
|
|
int bones = 2 + this.rand.nextInt(2) + this.rand.nextInt(i + 1);
|
|
for (int j = 0; j < bones; j++)
|
|
dropItem(LOTRMod.wargBone, 1);
|
|
if (flag) {
|
|
int rugChance = 50 - i * 8;
|
|
rugChance = Math.max(rugChance, 1);
|
|
if (this.rand.nextInt(rugChance) == 0)
|
|
entityDropItem(new ItemStack(LOTRMod.wargskinRug, 1, (getWargType()).wargID), 0.0F);
|
|
}
|
|
}
|
|
@Inject(method = "func_70658_aO", at = @At("RETURN"), cancellable = true, remap = false)
|
|
private void cinderloe$boostArmorFromRider(CallbackInfoReturnable<Integer> cir) {
|
|
if (this.riddenByEntity instanceof EntityPlayer) {
|
|
EntityPlayer rider = (EntityPlayer) this.riddenByEntity;
|
|
|
|
int bonus = 0;
|
|
for (ItemStack armor : rider.inventory.armorInventory) {
|
|
if (armor != null && LOTREnchantmentHelper.hasEnchant(armor, LOTREnchantment.getEnchantmentByName("mountArmor"))) {
|
|
bonus++;
|
|
}
|
|
}
|
|
|
|
if (bonus > 0) {
|
|
int newArmorValue = cir.getReturnValue() + bonus;
|
|
cir.setReturnValue(newArmorValue);
|
|
}
|
|
}
|
|
}
|
|
}
|