@SuppressWarnings("unchecked") @Override public boolean openTradeWindow(String name, List<ItemStack[]> recipes, Player player) { try { EntityVillager villager = new EntityVillager(((CraftPlayer) player).getHandle().world, 0); if (name != null && !name.isEmpty()) { villager.setCustomName(name); } Field recipeListField = EntityVillager.class.getDeclaredField("bu"); recipeListField.setAccessible(true); MerchantRecipeList recipeList = (MerchantRecipeList) recipeListField.get(villager); if (recipeList == null) { recipeList = new MerchantRecipeList(); recipeListField.set(villager, recipeList); } recipeList.clear(); for (ItemStack[] recipe : recipes) { recipeList.add(createMerchantRecipe(recipe[0], recipe[1], recipe[2])); } villager.a(((CraftPlayer) player).getHandle()); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
@Override public void collide(Entity inEntity) { if (this.getRemoteEntity() == null) { super.collide(inEntity); return; } if (((RemoteBaseEntity) this.m_remoteEntity).onCollide(inEntity.getBukkitEntity())) super.collide(inEntity); }
@Override public void g(double x, double y, double z) { if (this.m_remoteEntity == null) { super.g(x, y, z); return; } Vector vector = ((RemoteBaseEntity) this.m_remoteEntity).onPush(x, y, z); if (vector != null) super.g(vector.getX(), vector.getY(), vector.getZ()); }
@Override public void e(float inXMotion, float inZMotion) { float[] motion = new float[] {inXMotion, inZMotion, 0}; if (this.m_remoteEntity.getMind().hasBehaviour("Ride")) ((RideBehavior) this.m_remoteEntity.getMind().getBehaviour("Ride")).ride(motion); super.e(motion[0], motion[1]); this.motY = motion[2]; }
@Override public void move(double d0, double d1, double d2) { if (this.m_remoteEntity != null && this.m_remoteEntity.isStationary()) return; super.move(d0, d1, d2); }
@Override public void l_() { super.l_(); if (this.getRemoteEntity() != null) this.getRemoteEntity().getMind().tick(); }
@Override public void die(DamageSource damagesource) { ((RemoteBaseEntity) this.m_remoteEntity).onDeath(); super.die(damagesource); }