package me.km.effects.passive; import java.util.ArrayList; import java.util.stream.Collectors; import me.km.KajetansMod; import me.km.api.Module; import me.km.api.ModuleListener; import me.km.api.Utils; import me.km.effects.Effect; import me.km.effects.EffectUtils; import me.km.inventory.InventoryUtils; import me.km.items.weapons.ItemDagger; import net.minecraft.entity.Entity; import net.minecraft.entity.monster.EntityMob; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.init.MobEffects; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumHand; import net.minecraft.util.text.TextComponentString; import net.minecraft.village.MerchantRecipeList; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class Mugging extends ModuleListener { public Mugging(Module m) { super(m); } @SubscribeEvent(receiveCanceled = false) public void mugging(PlayerInteractEvent.EntityInteract e) { if(e.getHand() == EnumHand.OFF_HAND || !KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills) { return; } EntityPlayer p = e.getEntityPlayer(); if(!(p.getHeldItemMainhand().getItem() instanceof ItemDagger)) { return; } int mugging = EffectUtils.getEffectLevel(p, Effect.MUGGING); if(mugging < 1) { return; } e.setCanceled(true); Entity ent = e.getTarget(); if(ent instanceof EntityMob) { if(InventoryUtils.getFirstEmptyStack(p.inventory) == -1) { this.getModule().send(p, "Dein Inventar ist zu voll für einen Diebstahl."); return; } EntityMob m = (EntityMob) ent; if(mugging < Utils.randomInt(1, 5)) { this.getModule().send(p, "Der Diebstahl hat fehlgeschlagen."); if(!p.isPotionActive(MobEffects.INVISIBILITY)) { m.setAttackTarget(p); } p.getHeldItemMainhand().damageItem(15, p); return; } boolean b = true; for(ItemStack stack : m.getArmorInventoryList()) { if(!stack.isEmpty()) { b = false; if(Utils.randomInt(1, 5) <= mugging) { m.entityDropItem(stack, 0); } } } if(b) { this.getModule().send(p, "Hier gibt es nichts zum stehlen."); return; } this.getModule().send(p, "Der Diebstahl war erfolgreich."); } else if(ent instanceof EntityVillager) { if(InventoryUtils.getFirstEmptyStack(p.inventory) == -1) { this.getModule().send(p, "Dein Inventar ist zu voll für einen Diebstahl."); return; } EntityVillager v = (EntityVillager) ent; if(mugging < Utils.randomInt(1, 5)) { this.getModule().send(p, "Der Diebstahl hat fehlgeschlagen."); p.getHeldItemMainhand().damageItem(15, p); if(!p.isPotionActive(MobEffects.INVISIBILITY)) { p.sendMessage(new TextComponentString("§7[§c" + v.getName() + "§7] §rWas machst du da?")); p.attackEntityFrom(DamageSource.causeMobDamage(v), Utils.randomInt(6, 12)); return; } p.sendMessage(new TextComponentString("§7[§c" + v.getName() + "§7] §rHuch, was war das?")); return; } MerchantRecipeList list = v.getRecipes(p); ArrayList loot; if(list != null) { loot = new ArrayList<>(list.stream().map(r -> r.getItemToBuy()).collect(Collectors.toList())); } else { loot = new ArrayList<>(); } loot.add(new ItemStack(Items.BREAD)); v.entityDropItem(loot.get(Utils.randomInt(0, loot.size() - 1)).copy(), 0); this.getModule().send(p, "Der Diebstahl war erfolgreich."); } } }