Skip to content

Commit

Permalink
Merge pull request #81 from GTNewHorizons/cell-housing
Browse files Browse the repository at this point in the history
cell housing and multi fluid cell
  • Loading branch information
GlodBlock authored Feb 12, 2023
2 parents 7910578 + 4f54c9b commit 273ac04
Show file tree
Hide file tree
Showing 23 changed files with 515 additions and 153 deletions.
123 changes: 72 additions & 51 deletions src/main/java/com/glodblock/github/common/item/FCBaseItemCell.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,28 @@

import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;

import appeng.api.AEApi;
import appeng.api.config.FuzzyMode;
import appeng.api.config.IncludeExclude;
import appeng.api.implementations.items.IUpgradeModule;
import appeng.api.storage.IMEInventoryHandler;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IItemList;
import appeng.core.features.AEFeature;
import appeng.core.localization.GuiText;
import appeng.items.AEBaseItem;
import appeng.items.contents.CellConfig;
import appeng.items.contents.CellUpgrades;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;
import appeng.util.ReadableNumberConverter;

Expand All @@ -30,74 +36,43 @@
import com.glodblock.github.common.storage.IFluidCellInventory;
import com.glodblock.github.common.storage.IFluidCellInventoryHandler;
import com.glodblock.github.common.storage.IStorageFluidCell;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.ModAndClassUtil;
import com.glodblock.github.util.NameConst;
import com.google.common.base.Optional;

public abstract class FCBaseItemCell extends AEBaseItem implements IStorageFluidCell {

protected final CellType component;
protected final long totalBytes;
protected final int perType;
protected final double idleDrain;
protected CellType component;
protected long totalBytes;
protected int perType;
protected double idleDrain;
protected int maxType = 1;
private final ReadableNumberConverter format = ReadableNumberConverter.INSTANCE;

@SuppressWarnings("Guava")
public FCBaseItemCell(long bytes, int perType, double drain) {
public FCBaseItemCell(long bytes, int perType, int totalType, double drain) {
super(Optional.of(bytes / 1024 + "k"));
this.setFeature(EnumSet.of(AEFeature.StorageCells));
this.setMaxStackSize(1);
this.totalBytes = bytes;
this.perType = perType;
this.idleDrain = drain;
this.maxType = totalType;
this.component = null;
}

@SuppressWarnings("Guava")
public FCBaseItemCell(final CellType whichCell, final long kilobytes) {
super(Optional.of(kilobytes + "k"));
this.setFeature(EnumSet.of(AEFeature.StorageCells));
this.setMaxStackSize(1);
this.totalBytes = kilobytes * 1024;
this.component = whichCell;

switch (this.component) {
case Cell1kPart:
this.idleDrain = 0.5;
this.perType = 8;
break;
case Cell4kPart:
this.idleDrain = 1.0;
this.perType = 8;
break;
case Cell16kPart:
this.idleDrain = 1.5;
this.perType = 8;
break;
case Cell64kPart:
this.idleDrain = 2.0;
this.perType = 8;
break;
case Cell256kPart:
this.idleDrain = 2.5;
this.perType = 8;
break;
case Cell1024kPart:
this.idleDrain = 3.0;
this.perType = 8;
break;
case Cell4096kPart:
this.idleDrain = 3.5;
this.perType = 8;
break;
case Cell16384kPart:
this.idleDrain = 4.0;
this.perType = 8;
break;
default:
this.idleDrain = 0.0;
this.perType = 8;
}
@SuppressWarnings("all")
public FCBaseItemCell(final Optional<String> subName) {
super(subName);
}

public ItemStack getHousing() {
return ItemAndBlockHolder.CELL_HOUSING.stack();
}

public ItemStack getComponent() {
return component.stack(1);
}

@Override
Expand Down Expand Up @@ -206,7 +181,7 @@ public double getIdleDrain() {

@Override
public int getTotalTypes(final ItemStack cellItem) {
return 1;
return this.maxType;
}

@Override
Expand Down Expand Up @@ -239,6 +214,52 @@ public void setFuzzyMode(ItemStack is, FuzzyMode fzMode) {
Platform.openNbtData(is).setString("FuzzyMode", fzMode.name());
}

@SuppressWarnings("unchecked")
protected boolean disassembleDrive(final ItemStack stack, final World world, final EntityPlayer player) {
if (player.isSneaking()) {
if (Platform.isClient()) {
return false;
}
final InventoryPlayer playerInventory = player.inventory;
final IMEInventoryHandler<?> inv = AEApi.instance().registries().cell()
.getCellInventory(stack, null, StorageChannel.FLUIDS);
if (inv != null && playerInventory.getCurrentItem() == stack) {
final InventoryAdaptor ia = InventoryAdaptor.getAdaptor(player, ForgeDirection.UNKNOWN);
final IItemList<IAEFluidStack> list = inv.getAvailableItems(StorageChannel.FLUIDS.createList());
if (list.isEmpty() && ia != null) {
playerInventory.setInventorySlotContents(playerInventory.currentItem, null);

// drop core
final ItemStack extraB = ia.addItems(this.component.stack(1));
if (extraB != null) {
player.dropPlayerItemWithRandomChoice(extraB, false);
}

// drop upgrades
final IInventory upgradesInventory = this.getUpgradesInventory(stack);
for (int upgradeIndex = 0; upgradeIndex < upgradesInventory.getSizeInventory(); upgradeIndex++) {
final ItemStack upgradeStack = upgradesInventory.getStackInSlot(upgradeIndex);
final ItemStack leftStack = ia.addItems(upgradeStack);
if (leftStack != null && upgradeStack.getItem() instanceof IUpgradeModule) {
player.dropPlayerItemWithRandomChoice(upgradeStack, false);
}
}

// drop empty storage cell case
final ItemStack extraA = ia.addItems(this.getHousing());
if (extraA != null) {
player.dropPlayerItemWithRandomChoice(this.getHousing(), false);
}
if (player.inventoryContainer != null) {
player.inventoryContainer.detectAndSendChanges();
}
return true;
}
}
}
return false;
}

public ItemStack stack(int size) {
return new ItemStack(this, size);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,38 +1,30 @@
package com.glodblock.github.common.item;

import java.util.EnumSet;
import java.util.HashMap;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.event.ForgeEventFactory;

import appeng.api.AEApi;
import appeng.api.exceptions.MissingDefinition;
import appeng.api.implementations.items.IUpgradeModule;
import appeng.api.storage.IMEInventoryHandler;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IItemList;
import appeng.core.AEConfig;
import appeng.core.features.AEFeature;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;

import com.glodblock.github.FluidCraft;
import com.glodblock.github.common.Config;
import com.glodblock.github.common.storage.CellType;
import com.glodblock.github.common.storage.IStorageFluidCell;
import com.glodblock.github.common.tabs.FluidCraftingTabs;
import com.glodblock.github.loader.IRegister;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.util.NameConst;
import com.google.common.base.Optional;

import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
Expand All @@ -42,14 +34,60 @@ public class ItemBasicFluidStorageCell extends FCBaseItemCell
implements IStorageFluidCell, IRegister<ItemBasicFluidStorageCell> {

private static final HashMap<Integer, IIcon> icon = new HashMap<>();

public ItemBasicFluidStorageCell(final CellType whichCell, final long kilobytes) {
super(whichCell, kilobytes);
private final int housingValue;

@SuppressWarnings("Guava")
public ItemBasicFluidStorageCell(final CellType whichCell, final int housingValue, final long kilobytes) {
super(Optional.of(kilobytes + "k"));
this.setFeature(EnumSet.of(AEFeature.StorageCells));
this.setMaxStackSize(1);
this.totalBytes = kilobytes * 1024;
this.component = whichCell;
this.housingValue = housingValue;
setUnlocalizedName(NameConst.ITEM_FLUID_STORAGE + kilobytes);

switch (this.component) {
case Cell1kPart:
this.idleDrain = 0.5;
this.perType = 8;
break;
case Cell4kPart:
this.idleDrain = 1.0;
this.perType = 8;
break;
case Cell16kPart:
this.idleDrain = 1.5;
this.perType = 8;
break;
case Cell64kPart:
this.idleDrain = 2.0;
this.perType = 8;
break;
case Cell256kPart:
this.idleDrain = 2.5;
this.perType = 8;
break;
case Cell1024kPart:
this.idleDrain = 3.0;
this.perType = 8;
break;
case Cell4096kPart:
this.idleDrain = 3.5;
this.perType = 8;
break;
case Cell16384kPart:
this.idleDrain = 4.0;
this.perType = 8;
break;
default:
this.idleDrain = 0.0;
this.perType = 8;
}
}

public ItemStack getComponent() {
return component.stack(1);
@Override
public ItemStack getHousing() {
return ItemAndBlockHolder.CELL_HOUSING.stack(1, this.housingValue);
}

@Override
Expand Down Expand Up @@ -82,55 +120,6 @@ public ItemStack onItemRightClick(final ItemStack stack, final World world, fina
return stack;
}

@SuppressWarnings("unchecked")
private boolean disassembleDrive(final ItemStack stack, final World world, final EntityPlayer player) {
if (player.isSneaking()) {
if (Platform.isClient()) {
return false;
}
final InventoryPlayer playerInventory = player.inventory;
final IMEInventoryHandler<?> inv = AEApi.instance().registries().cell()
.getCellInventory(stack, null, StorageChannel.FLUIDS);
if (inv != null && playerInventory.getCurrentItem() == stack) {
final InventoryAdaptor ia = InventoryAdaptor.getAdaptor(player, ForgeDirection.UNKNOWN);
final IItemList<IAEFluidStack> list = inv.getAvailableItems(StorageChannel.FLUIDS.createList());
if (list.isEmpty() && ia != null) {
playerInventory.setInventorySlotContents(playerInventory.currentItem, null);

// drop core
final ItemStack extraB = ia.addItems(this.component.stack(1));
if (extraB != null) {
player.dropPlayerItemWithRandomChoice(extraB, false);
}

// drop upgrades
final IInventory upgradesInventory = this.getUpgradesInventory(stack);
for (int upgradeIndex = 0; upgradeIndex < upgradesInventory.getSizeInventory(); upgradeIndex++) {
final ItemStack upgradeStack = upgradesInventory.getStackInSlot(upgradeIndex);
final ItemStack leftStack = ia.addItems(upgradeStack);
if (leftStack != null && upgradeStack.getItem() instanceof IUpgradeModule) {
player.dropPlayerItemWithRandomChoice(upgradeStack, false);
}
}

// drop empty storage cell case
for (final ItemStack storageCellStack : AEApi.instance().definitions().materials()
.emptyStorageCell().maybeStack(1).asSet()) {
final ItemStack extraA = ia.addItems(storageCellStack);
if (extraA != null) {
player.dropPlayerItemWithRandomChoice(extraA, false);
}
}
if (player.inventoryContainer != null) {
player.inventoryContainer.detectAndSendChanges();
}
return true;
}
}
}
return false;
}

@Override
public boolean onItemUseFirst(final ItemStack stack, final EntityPlayer player, final World world, final int x,
final int y, final int z, final int side, final float hitX, final float hitY, final float hitZ) {
Expand All @@ -140,9 +129,8 @@ public boolean onItemUseFirst(final ItemStack stack, final EntityPlayer player,

@Override
public ItemStack getContainerItem(final ItemStack itemStack) {
for (final ItemStack stack : AEApi.instance().definitions().materials().emptyStorageCell().maybeStack(1)
.asSet()) {
return stack;
if (this.getHousing() != null) {
return this.getHousing();
}
throw new MissingDefinition("Tried to use empty storage cells while basic storage cells are defined.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public ItemBasicFluidStoragePart() {

@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings("unchecked")
@SuppressWarnings({ "unchecked", "rawtypes" })
public void getSubItems(Item item, CreativeTabs tab, List list) {
for (int i = 0; i < types; ++i) {
list.add(new ItemStack(item, 1, i));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ public class ItemFluidExtremeStorageCell extends FCBaseItemCell

private final String name;

public ItemFluidExtremeStorageCell(String name, long bytes, int perType, double drain) {
super(bytes, perType, drain);
public ItemFluidExtremeStorageCell(String name, long bytes, int perType, int totalTypes, double drain) {
super(bytes, perType, totalTypes, drain);
setUnlocalizedName(name);
this.name = name;
setTextureName(FluidCraft.resource(name).toString());
Expand Down
Loading

0 comments on commit 273ac04

Please sign in to comment.