2016-12-04 00:10:52 +01:00
/ *
* This file ( " AwfulUtil.java " ) is part of the Actually Additions mod for Minecraft .
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http : //ellpeck.de/actaddlicense
* View the source code at https : //github.com/Ellpeck/ActuallyAdditions
*
2017-01-01 16:23:26 +01:00
* © 2015 - 2017 Ellpeck
2016-12-04 00:10:52 +01:00
* /
package de.ellpeck.actuallyadditions.mod.util ;
import com.google.common.collect.Lists ;
import net.minecraft.item.ItemStack ;
import net.minecraft.util.math.MathHelper ;
import net.minecraft.world.storage.loot.LootContext ;
import net.minecraft.world.storage.loot.LootTable ;
2017-08-06 10:29:28 +02:00
import net.minecraftforge.fml.common.FMLCommonHandler ;
2016-12-04 00:10:52 +01:00
import net.minecraftforge.items.IItemHandlerModifiable ;
2017-06-29 18:36:33 +02:00
import java.util.Collections ;
import java.util.Iterator ;
import java.util.List ;
import java.util.Random ;
2016-12-04 00:10:52 +01:00
//This is stuff copied from somewhere in vanilla and changed so that it works properly
//It's unpolished and vanilla-y, so don't look at it! O_O
public final class AwfulUtil {
public static void fillInventory ( LootTable table , IItemHandlerModifiable inventory , Random rand , LootContext context ) {
List < ItemStack > list = table . generateLootForPools ( rand , context ) ;
List < Integer > list1 = getEmptySlotsRandomized ( inventory , rand ) ;
shuffleItems ( list , list1 . size ( ) , rand ) ;
for ( ItemStack itemstack : list ) {
if ( itemstack . isEmpty ( ) ) {
inventory . setStackInSlot ( list1 . remove ( list1 . size ( ) - 1 ) , ItemStack . EMPTY ) ;
}
else {
inventory . setStackInSlot ( list1 . remove ( list1 . size ( ) - 1 ) , itemstack ) ;
}
}
}
private static void shuffleItems ( List < ItemStack > stacks , int someInt , Random rand ) {
List < ItemStack > list = Lists . newArrayList ( ) ;
Iterator < ItemStack > iterator = stacks . iterator ( ) ;
while ( iterator . hasNext ( ) ) {
ItemStack itemstack = iterator . next ( ) ;
if ( itemstack . isEmpty ( ) ) {
iterator . remove ( ) ;
}
else if ( itemstack . getCount ( ) > 1 ) {
list . add ( itemstack ) ;
iterator . remove ( ) ;
}
}
someInt = someInt - stacks . size ( ) ;
2017-07-19 12:19:49 +02:00
while ( someInt > 0 & & list . size ( ) > 0 ) {
2016-12-04 00:10:52 +01:00
ItemStack itemstack2 = list . remove ( MathHelper . getInt ( rand , 0 , list . size ( ) - 1 ) ) ;
int i = MathHelper . getInt ( rand , 1 , itemstack2 . getCount ( ) / 2 ) ;
ItemStack itemstack1 = itemstack2 . splitStack ( i ) ;
if ( itemstack2 . getCount ( ) > 1 & & rand . nextBoolean ( ) ) {
list . add ( itemstack2 ) ;
}
else {
stacks . add ( itemstack2 ) ;
}
if ( itemstack1 . getCount ( ) > 1 & & rand . nextBoolean ( ) ) {
list . add ( itemstack1 ) ;
}
else {
stacks . add ( itemstack1 ) ;
}
}
stacks . addAll ( list ) ;
Collections . shuffle ( stacks , rand ) ;
}
private static List < Integer > getEmptySlotsRandomized ( IItemHandlerModifiable inventory , Random rand ) {
List < Integer > list = Lists . newArrayList ( ) ;
for ( int i = 0 ; i < inventory . getSlots ( ) ; + + i ) {
if ( inventory . getStackInSlot ( i ) . isEmpty ( ) ) {
list . add ( i ) ;
}
}
Collections . shuffle ( list , rand ) ;
return list ;
}
2017-08-06 10:29:28 +02:00
public static void callTheFuckinPolice ( Object . . . stuff ) {
int i = 0 ;
String error = " Actually Additions: Something is incredibly wrong. I don't know what you did, or how this method got called. But something is just completely wrong. This method was provided with " ;
for ( Object k : stuff ) {
error + = ( " \ n " + i + + + " : " + ( k = = null ? " null " : ( k . getClass ( ) + " <- CLASS | INSTANCE -> " + k . toString ( ) + " , " ) ) ) ;
}
error + = " \ n " + " The current side is: " + FMLCommonHandler . instance ( ) . getEffectiveSide ( ) ;
throw new IllegalStateException ( error ) ;
}
2016-12-04 00:10:52 +01:00
}