2
0
Fork 0
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.

83 lines
2.9 KiB
Java

package com.zivilon.cinder_loe.items;
import com.zivilon.cinder_loe.CinderLoE;
import com.zivilon.cinder_loe.LoECreativeTabs;
import lotr.common.entity.npc.LOTREntityNPC;
import lotr.common.entity.npc.LOTRHiredNPCInfo;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumAction;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class unitLevelTool extends Item {
public unitLevelTool() {
setCreativeTab(LoECreativeTabs.tabMiscLoE);
}
public EnumAction getItemUseAction(ItemStack itemstack) {
return EnumAction.bow;
}
@Override
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {
List<LOTREntityNPC> hiredNPCs = this.findHiredNPCsNearPlayer(player);
if (!hiredNPCs.isEmpty()) {
for (LOTREntityNPC hiredNPC : hiredNPCs) {
if (hiredNPC != null && hiredNPC.hiredNPCInfo != null) {
try {
LOTRHiredNPCInfo npcInfo = hiredNPC.hiredNPCInfo;
Method addExperienceMethod = LOTRHiredNPCInfo.class.getDeclaredMethod("addExperience", int.class);
addExperienceMethod.setAccessible(true);
int xpToAdd = 1;
try {
xpToAdd = Integer.parseInt(itemStack.getDisplayName());
} catch (NumberFormatException e) {
player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Tool name wasnt a number, applying 1 Xp instead"));
continue;
}
addExperienceMethod.invoke(npcInfo, xpToAdd);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
return itemStack;
}
private List<LOTREntityNPC> findHiredNPCsNearPlayer(EntityPlayer player) {
// Logic to find all nearby hired NPCs within a certain range
double range = 20.0D; // Set the range within which the NPCs should be found
List<LOTREntityNPC> nearbyHiredNPCs = new ArrayList<>();
for (Object entity : player.worldObj.getEntitiesWithinAABB(LOTREntityNPC.class, player.boundingBox.expand(range, range, range))) {
LOTREntityNPC npc = (LOTREntityNPC) entity;
// Check if the player has sufficient permission level (admin tool usage)
if (npc.hiredNPCInfo.getHiringPlayerUUID() != null && player.canCommandSenderUseCommand(2, "")) {
nearbyHiredNPCs.add(npc);
}
}
return nearbyHiredNPCs;
}
}