- 122
- 4
- 6
Привет всем. Немного застопорился в написании.
Ни как не могу написать слот для для предметов слева. Постоянно крашит майн если добавляю слоты туда. + ко всему прочему нужно распределение по типу для каждого слота в левой части, пробовал код из baubles но опять же крашит. Подскажите кто за это шарит, заранее спасибо.
То что сейчас есть:
Ни как не могу написать слот для для предметов слева. Постоянно крашит майн если добавляю слоты туда. + ко всему прочему нужно распределение по типу для каждого слота в левой части, пробовал код из baubles но опять же крашит. Подскажите кто за это шарит, заранее спасибо.
То что сейчас есть:
ContainerTrinkets:
public class ContainerTrinkets extends Container {
public final InventoryCrafting craftMatrix = new InventoryCrafting(this, 2, 2);
public final InventoryCraftResult craftResult = new InventoryCraftResult();
public ITrinketContainerHandler trinket;
private final EntityPlayer player;
private static final EntityEquipmentSlot[] equipmentSlots = new EntityEquipmentSlot[] { EntityEquipmentSlot.HEAD, EntityEquipmentSlot.CHEST, EntityEquipmentSlot.LEGS, EntityEquipmentSlot.FEET};
public ContainerTrinkets(final InventoryPlayer playerInv, boolean client, final EntityPlayer player) {
this.player = player;
this.addSlotToContainer(new SlotCrafting(playerInv.player, this.craftMatrix, this.craftResult, 0, 154, 28));
int slotRowAmount;
int slotRowLength;
//Кравт
for (slotRowAmount = 0; slotRowAmount < 2; ++slotRowAmount) for (slotRowLength = 0; slotRowLength < 2; ++slotRowLength) {
this.addSlotToContainer(new Slot(this.craftMatrix, slotRowLength + slotRowAmount * 2, 98 + slotRowLength * 18, 18 + slotRowAmount * 18));
}
//this.addSlotToContainer(new SlotTrinket(player, trinket, 0, 77, 8));
//Броня
for (slotRowAmount = 0; slotRowAmount < 4; ++slotRowAmount) {
final EntityEquipmentSlot entityequipmentslot = ContainerTrinkets.equipmentSlots[slotRowAmount];
this.addSlotToContainer(new Slot(playerInv, 36 + (3 - slotRowAmount), 8, 8 + slotRowAmount * 18) {
public int getSlotStackLimit() { return 1; }
public boolean isItemValid(ItemStack stack) { return stack.getItem().isValidArmor(stack, entityequipmentslot, player); }
public boolean canTakeStack(EntityPlayer player) {
ItemStack stack = this.getStack();
return !stack.isEmpty() && !player.isCreative() && EnchantmentHelper.hasBindingCurse(stack) ? false : super.canTakeStack(player);
}
public String getSlotTexture() { return ItemArmor.EMPTY_SLOT_NAMES[entityequipmentslot.getIndex()]; }
});
}
//Инвентарь
for (slotRowAmount = 0; slotRowAmount < 3; ++slotRowAmount) for (slotRowLength = 0; slotRowLength < 9; ++slotRowLength) {
this.addSlotToContainer(new Slot(playerInv, slotRowLength + (slotRowAmount + 1) * 9, 8 + slotRowLength * 18, 84 + slotRowAmount * 18));
}
//Хотбар
for (slotRowAmount = 0; slotRowAmount < 9; ++slotRowAmount) {
this.addSlotToContainer(new Slot(playerInv, slotRowAmount, 8 + slotRowAmount * 18, 142));
}
//Слот щита
this.addSlotToContainer(new Slot(playerInv, 40, 77, 62) {
public boolean isItemValid(ItemStack stack) {
return super.isItemValid(stack);
}
public String getSlotTexture() {
return "minecraft:items/empty_armor_slot_shield";
}
});
this.onCraftMatrixChanged(this.craftMatrix);
}
public void onCraftMatrixChanged(IInventory par1IInventory) {
this.slotChangedCraftingGrid(this.player.getEntityWorld(), this.player, this.craftMatrix, this.craftResult);
}
public void onContainerClosed(EntityPlayer player) {
super.onContainerClosed(player);
this.craftResult.clear();
if (!player.world.isRemote) this.clearContainer(player, player.world, this.craftMatrix);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack itemstack = ItemStack.EMPTY;
Slot slot = (Slot)this.inventorySlots.get(index);
if (slot != null && slot.getHasStack()) {
ItemStack itemstack1 = slot.getStack();
itemstack = itemstack1.copy();
EntityEquipmentSlot entityequipmentslot = EntityLiving.getSlotForItemStack(itemstack);
int slotShift = trinket.getSlots();
if (index == 0) {
if (!this.mergeItemStack(itemstack1, 9+ slotShift, 45+ slotShift, true)) return ItemStack.EMPTY;
slot.onSlotChange(itemstack1, itemstack);
}
else if (index >= 1 && index < 5) if (!this.mergeItemStack(itemstack1, 9+ slotShift, 45+ slotShift, false)) return ItemStack.EMPTY;
else if (index >= 5 && index < 9) if (!this.mergeItemStack(itemstack1, 9+ slotShift, 45+ slotShift, false)) return ItemStack.EMPTY;
// baubles -> inv
else if (index >= 9 && index < 9+slotShift) if (!this.mergeItemStack(itemstack1, 9+ slotShift, 45+ slotShift, false)) return ItemStack.EMPTY;
// inv -> armor
else if (entityequipmentslot.getSlotType() == EntityEquipmentSlot.Type.ARMOR && !((Slot)this.inventorySlots.get(8 - entityequipmentslot.getIndex())).getHasStack()) {
int i = 8 - entityequipmentslot.getIndex();
if (!this.mergeItemStack(itemstack1, i, i + 1, false)) return ItemStack.EMPTY;
}
// inv -> offhand
else if (entityequipmentslot == EntityEquipmentSlot.OFFHAND && !((Slot)this.inventorySlots.get(45+ slotShift)).getHasStack()) {
if (!this.mergeItemStack(itemstack1, 45+ slotShift, 46+ slotShift, false)) return ItemStack.EMPTY;
}
else if (index >= 9+ slotShift && index < 36+ slotShift) {
if (!this.mergeItemStack(itemstack1, 36+ slotShift, 45+ slotShift, false)) return ItemStack.EMPTY;
}
else if (index >= 36+ slotShift && index < 45+ slotShift) {
if (!this.mergeItemStack(itemstack1, 9+ slotShift, 36+ slotShift, false)) return ItemStack.EMPTY;
}
else if (!this.mergeItemStack(itemstack1, 9+ slotShift, 45+ slotShift, false)) return ItemStack.EMPTY;
if (itemstack1.isEmpty()) slot.putStack(ItemStack.EMPTY); else slot.onSlotChanged();
if (itemstack1.getCount() == itemstack.getCount()) return ItemStack.EMPTY;
ItemStack itemstack2 = slot.onTake(player, itemstack1);
if (index == 0) player.dropItem(itemstack2, false);
}
return itemstack;
}
public boolean canMergeSlot(ItemStack stack, Slot slot) {
return slot.inventory != this.craftResult && super.canMergeSlot(stack, slot);
}
public boolean canInteractWith(EntityPlayer player) {
return true;
}
}
ITrinketContainerHandler:
public interface ITrinketContainerHandler extends IItemHandlerModifiable {
public boolean isItemValidForSlot(int slot, ItemStack stack, EntityLivingBase player);
/**
* Used internally to prevent equip/unequip events from triggering when they shouldn't
*/
public boolean isEventBlocked();
public void setEventBlock(boolean blockEvents);
/**
* Used internally for syncing. Indicates if the inventory has changed since last sync
*/
boolean isChanged(int slot);
void setChanged(int slot, boolean changed);
public void setPlayer(EntityLivingBase player);
}
SlotTrinket:
public class SlotTrinket extends SlotItemHandler {
int slot;
EntityPlayer player;
public SlotTrinket(EntityPlayer player, ITrinketContainerHandler itemHandler, int index, int xPosition, int yPosition) {
super(itemHandler, index, xPosition, yPosition);
this.slot = index;
this.player = player;
}
public boolean isItemValid(ItemStack stack) {
return ((ITrinketContainerHandler) this.getItemHandler()).isItemValidForSlot(this.slot, stack, this.player);
}
public int getSlotStackLimit() {
return 1;
}
}