@Override public @Nonnull EnumActionResult onItemUseFirst(@Nonnull EntityPlayer player, @Nonnull World world, @Nonnull BlockPos pos, @Nonnull EnumFacing side, float hitX, float hitY, float hitZ, @Nonnull EnumHand hand) { if (world.isRemote || System.getProperty("INDEV") == null || !player.isCreative()) { return EnumActionResult.PASS; } TileEntity te = world.getTileEntity(pos); if (te instanceof TileEntityChest) { TileEntityChest chest = (TileEntityChest) te; chest.clear(); LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) world); lootcontext$builder.withLuck(player.getLuck()); LootTable loottable = world.getLootTableManager().getLootTableFromLocation(LootTableList.CHESTS_SIMPLE_DUNGEON); // LootTable loottable = world.getLootTableManager().getLootTableFromLocation(LootTableList.CHESTS_IGLOO_CHEST); loottable.fillInventory(chest, world.rand, lootcontext$builder.build()); return EnumActionResult.PASS; } else { IBlockState blockState = world.getBlockState(pos); int meta = blockState.getBlock().getMetaFromState(blockState); player.sendMessage(new TextComponentString(blockState + " (" + meta + ")")); } return EnumActionResult.PASS; }
public void fillWithLoot(@Nullable EntityPlayer player) { if (this.lootTable != null && this.world != null && this.world.getLootTableManager() != null) { LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); this.lootTable = null; Random random; if (this.lootTableSeed == 0L) { random = new Random(); } else { random = new Random(this.lootTableSeed); } LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) this.world); if (player != null) { lootcontext$builder.withLuck(player.getLuck()).withPlayer(player); // Forge: add player to LootContext } loottable.fillInventory(this, random, lootcontext$builder.build()); } }
public static void generateLootFor(World world, @Nullable EntityPlayer player, IItemHandler inventory, Random rng, ResourceLocation lootTableName, int rolls) { LootContext.Builder builder = new LootContext.Builder((WorldServer) world); LootTable lootTable = world.getLootTableManager().getLootTableFromLocation(lootTableName); if (player != null) { builder.withLuck(player.getLuck()).withPlayer(player); } LootContext lootContext = builder.build(); NonNullList<ItemStack> loot = NonNullList.create(); for (int i = 0; i < rolls; i++) { mergeItemStacks(loot, toNonNullList(lootTable.generateLootForPools(rng, lootContext))); } List<Integer> randomSlots = getEmptySlotsRandomized(inventory, rng); shuffleItems(loot, randomSlots.size(), rng); for (ItemStack itemstack : loot) { if (randomSlots.isEmpty()) { AncientWarfareCore.LOG.warn("Tried to over-fill a container"); return; } if (!itemstack.isEmpty()) { inventory.insertItem(randomSlots.remove(randomSlots.size() - 1), itemstack, false); } } }
lootcontext$builder.withLuck((float) EnchantmentHelper.getLuckOfSeaModifier(angler) + angler.getLuck() + tier); lootcontext$builder.withLootedEntity(this); lootcontext$builder.withPlayer(angler);
LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) world); int luck = EnchantmentHelper.getEnchantmentLevel(Enchantments.LUCK_OF_THE_SEA, this.getStackInSlot(SLOT_TOOL)); lootcontext$builder.withLuck(luck);
context.withLuck(getFortune()); List<ItemStack> fishStacks = world.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING).generateLootForPools(world.rand, context.build());
lootcontext$builder.withLuck(luck); lootcontext$builder.withPlayer(angler); lootcontext$builder.withLootedEntity(this);
builder = builder.withPlayer((EntityPlayer) trueSource).withLuck(ForgeHooks.getLootingLevel(entity, trueSource, source));
@SubscribeEvent public void onKillChicken(LivingDeathEvent event) { if (Debug.CHICKEN_FISHING > 0) { EntityPlayer angler = event.getSource().getEntity() instanceof EntityPlayer ? (EntityPlayer) event.getSource().getEntity() : null; if (angler != null && !angler.worldObj.isRemote && event.getEntityLiving() instanceof EntityChicken) { for (int i = 0; i < Debug.CHICKEN_FISHING; i++) { LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) angler.worldObj); lootcontext$builder.withLuck((float) EnchantmentHelper.getLuckOfSeaModifier(angler) + angler.getLuck()); lootcontext$builder.withPlayer(angler); //Added by Mariculture lootcontext$builder.withLootedEntity(event.getEntityLiving()); //Added by Mariculture for (ItemStack itemstack : angler.worldObj.getLootTableManager().getLootTableFromLocation(LootTableList.GAMEPLAY_FISHING).generateLootForPools(this.rand, lootcontext$builder.build())) { EntityItem entityitem = new EntityItem(angler.worldObj, event.getEntityLiving().posX, event.getEntityLiving().posY, event.getEntityLiving().posZ, itemstack); double d0 = angler.posX - event.getEntityLiving().posX; double d1 = angler.posY - event.getEntityLiving().posY; double d2 = angler.posZ - event.getEntityLiving().posZ; double d3 = (double) MathHelper.sqrt_double(d0 * d0 + d1 * d1 + d2 * d2); double d4 = 0.1D; entityitem.motionX = d0 * d4; entityitem.motionY = d1 * d4 + (double) MathHelper.sqrt_double(d3) * 0.08D; entityitem.motionZ = d2 * d4; angler.worldObj.spawnEntityInWorld(entityitem); angler.worldObj.spawnEntityInWorld(new EntityXPOrb(angler.worldObj, angler.posX, angler.posY + 0.5D, angler.posZ + 0.5D, this.rand.nextInt(6) + 1)); } } } } } }
/** * Our Method to drop a random item from an entire Loot Table */ public void dropRandomLootFromLootTable(ResourceLocation dungeonLoot, boolean wasRecentlyHit, int lootingModifier, DamageSource source) { long LootTableSeed = 0; int maxCount = 0; int currentCount = 0; Random Randomize = new Random(); int roll = 0; // Things for Looting enchant calculations LootTable loottable = world.getLootTableManager().getLootTableFromLocation(dungeonLoot); LootContext.Builder lootcontext$builder = (new LootContext.Builder((WorldServer) world)).withLootedEntity(this).withDamageSource(source); if (wasRecentlyHit && attackingPlayer != null) { lootcontext$builder = lootcontext$builder.withPlayer(attackingPlayer).withLuck(attackingPlayer.getLuck()); } // Here we count the amount of pools are in the Loot Table Array for (ItemStack itemstack : loottable.generateLootForPools(LootTableSeed == 0L ? rand : new Random(LootTableSeed), lootcontext$builder.build())) { maxCount++; } // Our Roll dependent on the amount of pools we counted roll = Randomize.nextInt(maxCount); for (ItemStack itemstack : loottable.generateLootForPools(LootTableSeed == 0L ? rand : new Random(LootTableSeed), lootcontext$builder.build())) { // Check if our current iteration matches our roll if (currentCount == roll) { entityDropItem(itemstack, 0.0F); } currentCount++; // Incrementing the current Iteration } }
public static ItemStack getStack(World world, EntityPlayer player, ResourceLocation lootTable) { long lootTableSeed = world.rand.nextLong(); LootTable loottable = world.getLootTableManager().getLootTableFromLocation(lootTable); Random random; if (lootTableSeed == 0L) { random = new Random(); } else { random = new Random(lootTableSeed); } LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer)world); if (player != null) { lootcontext$builder.withLuck(player.getLuck()); } loottable.fillInventory(INVENTORY, random, lootcontext$builder.build()); ItemStack result = INVENTORY.getStackInSlot(0); if (result != null) result = result.copy(); INVENTORY.setInventorySlotContents(0, null); return result; } }
@Override protected void dropLoot(boolean wasRecentlyHit, int lootingModifier, @Nullable DamageSource damageSource) { super.dropLoot(wasRecentlyHit, lootingModifier, damageSource); // Also drop loot from inner entity! EntityLivingBase innerEntity = getInnerEntity(); if (innerEntity instanceof EntityLiving && damageSource != DamageSource.OUT_OF_WORLD) { ResourceLocation deathLootTable = ObfuscationHelpers.getLootTable((EntityLiving) innerEntity); if (deathLootTable != null) { LootTable loottable = getEntityWorld().getLootTableManager().getLootTableFromLocation(deathLootTable); LootContext.Builder lootcontext$builder = (new LootContext.Builder((WorldServer) getEntityWorld())) .withLootedEntity(innerEntity) .withDamageSource(DamageSource.GENERIC); if (wasRecentlyHit && this.attackingPlayer != null) { lootcontext$builder = lootcontext$builder.withPlayer(this.attackingPlayer).withLuck(this.attackingPlayer.getLuck()); } for (ItemStack itemstack : loottable.generateLootForPools(getEntityWorld().rand, lootcontext$builder.build())) { this.entityDropItem(itemstack, 0.0F); } } } }
@Override @SuppressWarnings("ConstantConditions") public void newDay(World world, BlockPos pos, IBlockState state) { TileTrap trap = (TileTrap) world.getTileEntity(pos); if (trap.stack != null && FishingAPI.INSTANCE.isBait(trap.stack)) { if (trap.isSurroundedByWater(world, pos)) { LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) world); lootcontext$builder.withLootedEntity(FakePlayerHelper.getFakePlayerWithPosition((WorldServer) world, pos)); if (FishingHelper.isWater(world, pos.down())) lootcontext$builder.withLuck(1F); for (ItemStack itemstack : world.getLootTableManager().getLootTableFromLocation(trap.getLootTable()).generateLootForPools(world.rand, lootcontext$builder.build())) { trap.baited = false; trap.stack = itemstack.copy(); } trap.saveAndRefresh(); } } } };
private static List<ItemStack> getLoot(World world, @Nullable EntityPlayer player, boolean entityWasRecentlyHit, ResourceLocation lootTableName) { LootContext.Builder builder = new LootContext.Builder((WorldServer) world); LootTable lootTable = world.getLootTableManager().getLootTableFromLocation(lootTableName); if (entityWasRecentlyHit && player != null) { builder.withLuck(player.getLuck()).withPlayer(player); } return lootTable.generateLootForPools(world.rand, builder.build()); }
public static List<ItemStack> getLoot(ResourceLocation loot, World world, EntityPlayer player, float luck) { LootContext.Builder lootcontext$builder = new LootContext.Builder((WorldServer) world); lootcontext$builder.withLuck(player.getLuck() + luck); lootcontext$builder.withPlayer(player); return world.getLootTableManager().getLootTableFromLocation(loot).generateLootForPools(world.rand, lootcontext$builder.build()); }
public ItemStack getItemFromLootTable() { LootTable loottable = this.world.getLootTableManager().getLootTableFromLocation(getDeadLootTable()); LootContext.Builder lootcontext$builder = (new LootContext.Builder((WorldServer) this.world)).withLootedEntity(this).withDamageSource(DamageSource.GENERIC); if (this.attackingPlayer != null) { lootcontext$builder = lootcontext$builder.withPlayer(this.attackingPlayer).withLuck(this.attackingPlayer.getLuck()); } List<ItemStack> loot = loottable.generateLootForPools(this.rand, lootcontext$builder.build()); if (loot.isEmpty()) { return ItemStack.EMPTY; } else { return loot.get(0); } }
public void fillWithLoot(EntityPlayer player){ if(this.lootTable != null && !this.world.isRemote && this.world instanceof WorldServer){ LootTable table = this.world.getLootTableManager().getLootTableFromLocation(this.lootTable); this.lootTable = null; LootContext.Builder builder = new LootContext.Builder((WorldServer)this.world); if(player != null){ builder.withLuck(player.getLuck()); } AwfulUtil.fillInventory(table, this.inv, world.rand, builder.build()); } } }