base mod created

This commit is contained in:
Mohammad-Ali Minaie
2018-10-08 09:07:47 -04:00
parent 0a7700c356
commit b86dedad2f
7848 changed files with 584664 additions and 1 deletions

View File

@@ -0,0 +1,312 @@
package net.minecraft.util;
import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList;
import it.unimi.dsi.fastutil.ints.IntListIterator;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nullable;
import net.minecraft.client.util.RecipeItemHelper;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ContainerPlayer;
import net.minecraft.inventory.ContainerWorkbench;
import net.minecraft.inventory.InventoryCraftResult;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.network.play.server.SPacketPlaceGhostRecipe;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class ServerRecipeBookHelper
{
private final Logger field_194330_a = LogManager.getLogger();
private final RecipeItemHelper field_194331_b = new RecipeItemHelper();
private EntityPlayerMP field_194332_c;
private IRecipe field_194333_d;
private boolean field_194334_e;
private InventoryCraftResult field_194335_f;
private InventoryCrafting field_194336_g;
private List<Slot> field_194337_h;
public void func_194327_a(EntityPlayerMP p_194327_1_, @Nullable IRecipe p_194327_2_, boolean p_194327_3_)
{
if (p_194327_2_ != null && p_194327_1_.getRecipeBook().isUnlocked(p_194327_2_))
{
this.field_194332_c = p_194327_1_;
this.field_194333_d = p_194327_2_;
this.field_194334_e = p_194327_3_;
this.field_194337_h = p_194327_1_.openContainer.inventorySlots;
Container container = p_194327_1_.openContainer;
this.field_194335_f = null;
this.field_194336_g = null;
if (container instanceof ContainerWorkbench)
{
this.field_194335_f = ((ContainerWorkbench)container).craftResult;
this.field_194336_g = ((ContainerWorkbench)container).craftMatrix;
}
else if (container instanceof ContainerPlayer)
{
this.field_194335_f = ((ContainerPlayer)container).craftResult;
this.field_194336_g = ((ContainerPlayer)container).craftMatrix;
}
else if (container instanceof net.minecraftforge.common.crafting.IRecipeContainer)
{
this.field_194335_f = ((net.minecraftforge.common.crafting.IRecipeContainer)container).getCraftResult();
this.field_194336_g = ((net.minecraftforge.common.crafting.IRecipeContainer)container).getCraftMatrix();
}
if (this.field_194335_f != null && this.field_194336_g != null)
{
if (this.func_194328_c() || p_194327_1_.isCreative())
{
this.field_194331_b.clear();
p_194327_1_.inventory.fillStackedContents(this.field_194331_b, false);
this.field_194336_g.fillStackedContents(this.field_194331_b);
if (this.field_194331_b.canCraft(p_194327_2_, (IntList)null))
{
this.func_194329_b();
}
else
{
this.func_194326_a();
p_194327_1_.connection.sendPacket(new SPacketPlaceGhostRecipe(p_194327_1_.openContainer.windowId, p_194327_2_));
}
p_194327_1_.inventory.markDirty();
}
}
}
}
private void func_194326_a()
{
InventoryPlayer inventoryplayer = this.field_194332_c.inventory;
for (int i = 0; i < this.field_194336_g.getSizeInventory(); ++i)
{
ItemStack itemstack = this.field_194336_g.getStackInSlot(i);
if (!itemstack.isEmpty())
{
while (itemstack.getCount() > 0)
{
int j = inventoryplayer.storeItemStack(itemstack);
if (j == -1)
{
j = inventoryplayer.getFirstEmptyStack();
}
ItemStack itemstack1 = itemstack.copy();
itemstack1.setCount(1);
inventoryplayer.add(j, itemstack1);
this.field_194336_g.decrStackSize(i, 1);
}
}
}
this.field_194336_g.clear();
this.field_194335_f.clear();
}
private void func_194329_b()
{
boolean flag = this.field_194333_d.matches(this.field_194336_g, this.field_194332_c.world);
int i = this.field_194331_b.getBiggestCraftableStack(this.field_194333_d, (IntList)null);
if (flag)
{
boolean flag1 = true;
for (int j = 0; j < this.field_194336_g.getSizeInventory(); ++j)
{
ItemStack itemstack = this.field_194336_g.getStackInSlot(j);
if (!itemstack.isEmpty() && Math.min(i, itemstack.getMaxStackSize()) > itemstack.getCount())
{
flag1 = false;
}
}
if (flag1)
{
return;
}
}
int i1 = this.func_194324_a(i, flag);
IntList intlist = new IntArrayList();
if (this.field_194331_b.canCraft(this.field_194333_d, intlist, i1))
{
int j1 = i1;
IntListIterator intlistiterator = intlist.iterator();
while (intlistiterator.hasNext())
{
int k = ((Integer)intlistiterator.next()).intValue();
int l = RecipeItemHelper.unpack(k).getMaxStackSize();
if (l < j1)
{
j1 = l;
}
}
if (this.field_194331_b.canCraft(this.field_194333_d, intlist, j1))
{
this.func_194326_a();
this.func_194323_a(j1, intlist);
}
}
}
private int func_194324_a(int p_194324_1_, boolean p_194324_2_)
{
int i = 1;
if (this.field_194334_e)
{
i = p_194324_1_;
}
else if (p_194324_2_)
{
i = 64;
for (int j = 0; j < this.field_194336_g.getSizeInventory(); ++j)
{
ItemStack itemstack = this.field_194336_g.getStackInSlot(j);
if (!itemstack.isEmpty() && i > itemstack.getCount())
{
i = itemstack.getCount();
}
}
if (i < 64)
{
++i;
}
}
return i;
}
private void func_194323_a(int p_194323_1_, IntList p_194323_2_)
{
int i = this.field_194336_g.getWidth();
int j = this.field_194336_g.getHeight();
if (this.field_194333_d instanceof net.minecraftforge.common.crafting.IShapedRecipe)
{
net.minecraftforge.common.crafting.IShapedRecipe shapedrecipes = (net.minecraftforge.common.crafting.IShapedRecipe)this.field_194333_d;
i = shapedrecipes.getRecipeWidth();
j = shapedrecipes.getRecipeHeight();
}
int j1 = 1;
Iterator<Integer> iterator = p_194323_2_.iterator();
for (int k = 0; k < this.field_194336_g.getWidth() && j != k; ++k)
{
for (int l = 0; l < this.field_194336_g.getHeight(); ++l)
{
if (i == l || !iterator.hasNext())
{
j1 += this.field_194336_g.getWidth() - l;
break;
}
Slot slot = this.field_194337_h.get(j1);
ItemStack itemstack = RecipeItemHelper.unpack(((Integer)iterator.next()).intValue());
if (itemstack.isEmpty())
{
++j1;
}
else
{
for (int i1 = 0; i1 < p_194323_1_; ++i1)
{
this.func_194325_a(slot, itemstack);
}
++j1;
}
}
if (!iterator.hasNext())
{
break;
}
}
}
private void func_194325_a(Slot p_194325_1_, ItemStack p_194325_2_)
{
InventoryPlayer inventoryplayer = this.field_194332_c.inventory;
int i = inventoryplayer.findSlotMatchingUnusedItem(p_194325_2_);
if (i != -1)
{
ItemStack itemstack = inventoryplayer.getStackInSlot(i).copy();
if (!itemstack.isEmpty())
{
if (itemstack.getCount() > 1)
{
inventoryplayer.decrStackSize(i, 1);
}
else
{
inventoryplayer.removeStackFromSlot(i);
}
itemstack.setCount(1);
if (p_194325_1_.getStack().isEmpty())
{
p_194325_1_.putStack(itemstack);
}
else
{
p_194325_1_.getStack().grow(1);
}
}
}
}
private boolean func_194328_c()
{
InventoryPlayer inventoryplayer = this.field_194332_c.inventory;
for (int i = 0; i < this.field_194336_g.getSizeInventory(); ++i)
{
ItemStack itemstack = this.field_194336_g.getStackInSlot(i);
if (!itemstack.isEmpty())
{
int j = inventoryplayer.storeItemStack(itemstack);
if (j == -1)
{
j = inventoryplayer.getFirstEmptyStack();
}
if (j == -1)
{
return false;
}
}
}
return true;
}
}