Mugging.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package me.km.effects.passive;
  2. import java.util.ArrayList;
  3. import java.util.stream.Collectors;
  4. import me.km.KajetansMod;
  5. import me.km.api.Module;
  6. import me.km.api.ModuleListener;
  7. import me.km.api.Utils;
  8. import me.km.effects.Effect;
  9. import me.km.effects.EffectUtils;
  10. import me.km.inventory.InventoryUtils;
  11. import me.km.items.ItemDagger;
  12. import net.minecraft.entity.Entity;
  13. import net.minecraft.entity.monster.EntityMob;
  14. import net.minecraft.entity.passive.EntityVillager;
  15. import net.minecraft.entity.player.EntityPlayer;
  16. import net.minecraft.init.Items;
  17. import net.minecraft.init.MobEffects;
  18. import net.minecraft.item.ItemStack;
  19. import net.minecraft.util.DamageSource;
  20. import net.minecraft.util.EnumHand;
  21. import net.minecraft.util.text.TextComponentString;
  22. import net.minecraft.village.MerchantRecipeList;
  23. import net.minecraftforge.event.entity.player.PlayerInteractEvent;
  24. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  25. public class Mugging extends ModuleListener
  26. {
  27. public Mugging(Module m)
  28. {
  29. super(m);
  30. }
  31. @SubscribeEvent(receiveCanceled = false)
  32. public void mugging(PlayerInteractEvent.EntityInteract e)
  33. {
  34. if(e.getHand() == EnumHand.OFF_HAND || !KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills)
  35. {
  36. return;
  37. }
  38. EntityPlayer p = e.getEntityPlayer();
  39. if(!(p.getHeldItemMainhand().getItem() instanceof ItemDagger))
  40. {
  41. return;
  42. }
  43. int mugging = EffectUtils.getEffectLevel(p, Effect.MUGGING);
  44. if(mugging < 1)
  45. {
  46. return;
  47. }
  48. e.setCanceled(true);
  49. Entity ent = e.getTarget();
  50. if(ent instanceof EntityMob)
  51. {
  52. if(InventoryUtils.getFirstEmptyStack(p.inventory) == -1)
  53. {
  54. this.getModule().send(p, "Dein Inventar ist zu voll für einen Diebstahl.");
  55. return;
  56. }
  57. EntityMob m = (EntityMob) ent;
  58. if(mugging < Utils.randomInt(1, 5))
  59. {
  60. this.getModule().send(p, "Der Diebstahl hat fehlgeschlagen.");
  61. if(!p.isPotionActive(MobEffects.INVISIBILITY))
  62. {
  63. m.setAttackTarget(p);
  64. }
  65. p.getHeldItemMainhand().damageItem(15, p);
  66. return;
  67. }
  68. boolean b = true;
  69. for(ItemStack stack : m.getArmorInventoryList())
  70. {
  71. if(!stack.isEmpty())
  72. {
  73. b = false;
  74. if(Utils.randomInt(1, 5) <= mugging)
  75. {
  76. m.entityDropItem(stack, 0);
  77. }
  78. }
  79. }
  80. if(b)
  81. {
  82. this.getModule().send(p, "Hier gibt es nichts zum stehlen.");
  83. return;
  84. }
  85. this.getModule().send(p, "Der Diebstahl war erfolgreich.");
  86. }
  87. else if(ent instanceof EntityVillager)
  88. {
  89. if(InventoryUtils.getFirstEmptyStack(p.inventory) == -1)
  90. {
  91. this.getModule().send(p, "Dein Inventar ist zu voll für einen Diebstahl.");
  92. return;
  93. }
  94. EntityVillager v = (EntityVillager) ent;
  95. if(mugging < Utils.randomInt(1, 5))
  96. {
  97. this.getModule().send(p, "Der Diebstahl hat fehlgeschlagen.");
  98. p.getHeldItemMainhand().damageItem(15, p);
  99. if(!p.isPotionActive(MobEffects.INVISIBILITY))
  100. {
  101. p.sendMessage(new TextComponentString("§7[§c" + v.getName() + "§7] §rWas machst du da?"));
  102. p.attackEntityFrom(DamageSource.causeMobDamage(v), Utils.randomInt(6, 12));
  103. return;
  104. }
  105. p.sendMessage(new TextComponentString("§7[§c" + v.getName() + "§7] §rHuch, was war das?"));
  106. return;
  107. }
  108. MerchantRecipeList list = v.getRecipes(p);
  109. ArrayList<ItemStack> loot;
  110. if(list != null)
  111. {
  112. loot = new ArrayList<>(list.stream().map(r -> r.getItemToBuy()).collect(Collectors.toList()));
  113. }
  114. else
  115. {
  116. loot = new ArrayList<>();
  117. }
  118. loot.add(new ItemStack(Items.BREAD));
  119. v.entityDropItem(loot.get(Utils.randomInt(0, loot.size() - 1)).copy(), 0);
  120. this.getModule().send(p, "Der Diebstahl war erfolgreich.");
  121. }
  122. }
  123. }