package me.km.datatools; import me.km.api.Module; import me.km.api.ModuleListener; import me.km.inventory.CustomContainer; import me.km.inventory.InventoryBase; import me.km.inventory.InventoryUtils; import me.km.utils.ReflectionUtils; import net.minecraft.entity.passive.EntityVillager; import net.minecraft.item.ItemStack; import net.minecraft.village.MerchantRecipe; import net.minecraft.village.MerchantRecipeList; import net.minecraftforge.event.entity.EntityJoinWorldEvent; import net.minecraftforge.event.entity.living.LivingAttackEvent; import net.minecraftforge.event.entity.player.PlayerContainerEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; public class DataToolsEvents extends ModuleListener { public DataToolsEvents(Module m) { super(m); } @SubscribeEvent public void onVillagerMenuClose(PlayerContainerEvent.Close e) { if(!(e.getContainer() instanceof CustomContainer)) { return; } CustomContainer c = (CustomContainer) e.getContainer(); InventoryBase inv = c.getInventoryBase(); if(inv.getName().startsWith("ChangeInventory")) { InventoryUtils.setInventory(inv); this.getModule().send(e.getEntityPlayer(), "Der Villager-Inventar wurde überschrieben."); } else if(inv.getName().startsWith("ChangeTrades")) { EntityVillager v = (EntityVillager) inv.getOwner(); MerchantRecipeList list = v.getRecipes(null); if(list == null) { return; // will never happen } else { list.clear(); } MerchantRecipe mr; for(int i = 0; i < 36; i++) { if(i == 9) { i = 27; } if(inv.getStackInSlot(i) == ItemStack.EMPTY) { continue; } mr = new MerchantRecipe(inv.getStackInSlot(i + 9), inv.getStackInSlot(i + 18), inv.getStackInSlot(i), 0, Integer.MAX_VALUE); list.add(mr); } this.getModule().send(e.getEntityPlayer(), "Die Villager-Trades wurde überschrieben."); } } @SubscribeEvent public void removeVanillaTrades(EntityJoinWorldEvent e) { // removes vanilla trades and prevents further loading of new ones if (e.getEntity() instanceof EntityVillager) { EntityVillager v = (EntityVillager) e.getEntity(); ReflectionUtils.setCareerLevel(v, 10); MerchantRecipeList list = v.getRecipes(null); if(list != null) { list.clear(); } } } @SubscribeEvent public void VillagerProtect(LivingAttackEvent e) { if(e.getEntityLiving() instanceof EntityVillager && !e.getSource().isCreativePlayer()) { e.setCanceled(true); } } }