Fix more bugs

This commit is contained in:
Raoul Van den Berge
2016-11-27 14:48:45 +01:00
parent e65fb4b7cf
commit 07fa421057
14 changed files with 62 additions and 64 deletions

View File

@@ -43,11 +43,19 @@ import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.function.Function;
public final class RSUtils {
private static final NonNullList EMPTY_NON_NULL_LIST = new NonNullList<Object>(Collections.emptyList(), null) {
};
public static <T> NonNullList<T> emptyNonNullList() {
return (NonNullList<T>) EMPTY_NON_NULL_LIST;
}
public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET);
public static final DecimalFormat QUANTITY_FORMATTER = new DecimalFormat("####0.#", DecimalFormatSymbols.getInstance(Locale.US));
@@ -266,7 +274,7 @@ public final class RSUtils {
return copy;
}
public static FluidStack copyStack(FluidStack stack) {
public static FluidStack copyStack(@Nullable FluidStack stack) {
return stack == null ? null : stack.copy();
}

View File

@@ -21,9 +21,8 @@ public interface INetworkItemHandler {
* @param player the player that opened the network item
* @param controllerWorld the world of the controller
* @param hand the hand the player opened it with
* @return true if the opening was successful, false otherwise
*/
boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand);
void onOpen(EntityPlayer player, World controllerWorld, EnumHand hand);
/**
* Called when the player closes a network item.

View File

@@ -1,12 +1,12 @@
package com.raoulvdberge.refinedstorage.api.storage;
import java.util.List;
import net.minecraft.util.NonNullList;
public interface IStorage<T> {
/**
* @return stacks stored in this storage
*/
List<T> getStacks();
NonNullList<T> getStacks();
/**
* @return the amount of fluids stored in this storage

View File

@@ -7,8 +7,8 @@ import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumHand;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import java.util.ArrayList;
@@ -32,7 +32,7 @@ public class NetworkItemHandler implements INetworkItemHandler {
}
@Override
public boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand) {
public void onOpen(EntityPlayer player, World controllerWorld, EnumHand hand) {
boolean inRange = false;
for (INetworkNode node : network.getNodeGraph().all()) {
@@ -50,20 +50,16 @@ public class NetworkItemHandler implements INetworkItemHandler {
}
if (!inRange) {
return false;
player.sendMessage(new TextComponentTranslation("misc.refinedstorage:network_item.out_of_range"));
return;
}
ItemStack stack = player.getHeldItem(hand);
INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack);
INetworkItem item = ((INetworkItemProvider) player.getHeldItem(hand).getItem()).provide(this, player, player.getHeldItem(hand));
if (item.onOpen(network, player, controllerWorld, hand)) {
items.add(item);
return true;
}
return false;
}
@Override

View File

@@ -7,11 +7,10 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
/**
* A implementation of {@link IFluidStorage} that stores storage fluids in NBT.
@@ -32,7 +31,7 @@ public abstract class FluidStorageNBT implements IFluidStorage {
private int capacity;
private TileEntity tile;
private List<FluidStack> stacks = new ArrayList<>();
private NonNullList<FluidStack> stacks = NonNullList.create();
/**
* @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link FluidStorageNBT#createNBT()} if it doesn't exist yet
@@ -74,7 +73,7 @@ public abstract class FluidStorageNBT implements IFluidStorage {
}
@Override
public List<FluidStack> getStacks() {
public NonNullList<FluidStack> getStacks() {
return stacks;
}

View File

@@ -7,12 +7,11 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
/**
* A implementation of {@link IItemStorage} that stores storage items in NBT.
@@ -39,7 +38,7 @@ public abstract class ItemStorageNBT implements IItemStorage {
private int capacity;
private TileEntity tile;
private List<ItemStack> stacks = new ArrayList<>();
private NonNullList<ItemStack> stacks = NonNullList.create();
/**
* @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link ItemStorageNBT#createNBT()} if it doesn't exist yet
@@ -111,7 +110,7 @@ public abstract class ItemStorageNBT implements IItemStorage {
}
@Override
public List<ItemStack> getStacks() {
public NonNullList<ItemStack> getStacks() {
return stacks;
}

View File

@@ -13,6 +13,7 @@ public class NetworkItemEnergyForge extends EnergyStorage {
super(capacity, Integer.MAX_VALUE, Integer.MAX_VALUE);
this.stack = stack;
this.energy = stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_ENERGY) ? stack.getTagCompound().getInteger(NBT_ENERGY) : 0;
}
@Override

View File

@@ -51,19 +51,19 @@ public abstract class ItemNetworkItem extends ItemBase implements INetworkItemPr
public ActionResult<ItemStack> onItemRightClick(World world, EntityPlayer player, EnumHand hand) {
ItemStack stack = player.getHeldItem(hand);
if (!world.isRemote && isValid(stack)) {
World controllerWorld = DimensionManager.getWorld(getDimensionId(stack));
TileEntity controller;
if (controllerWorld != null && ((controller = controllerWorld.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))) instanceof TileController)) {
if (((TileController) controller).getNetworkItemHandler().onOpen(player, controllerWorld, hand)) {
return new ActionResult<>(EnumActionResult.SUCCESS, stack);
} else {
player.sendMessage(new TextComponentTranslation("misc.refinedstorage:network_item.out_of_range"));
}
} else {
if (!world.isRemote) {
if (!isValid(stack)) {
player.sendMessage(new TextComponentTranslation("misc.refinedstorage:network_item.not_found"));
} else {
World controllerWorld = DimensionManager.getWorld(getDimensionId(stack));
TileEntity controller;
if (controllerWorld != null && ((controller = controllerWorld.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))) instanceof TileController)) {
((TileController) controller).getNetworkItemHandler().onOpen(player, controllerWorld, hand);
} else {
player.sendMessage(new TextComponentTranslation("misc.refinedstorage:network_item.not_found"));
}
}
}

View File

@@ -6,14 +6,13 @@ import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorage;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.util.NonNullList;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidTankProperties;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
public class FluidStorageExternal implements IFluidStorage {
private FluidStack cache;
@@ -35,8 +34,8 @@ public class FluidStorageExternal implements IFluidStorage {
}
@Override
public List<FluidStack> getStacks() {
return getContents() == null ? Collections.emptyList() : Collections.singletonList(getContents().copy());
public NonNullList<FluidStack> getStacks() {
return getContents() == null ? RSUtils.emptyNonNullList() : NonNullList.withSize(1, getContents().copy());
}
@Nullable

View File

@@ -1,15 +1,15 @@
package com.raoulvdberge.refinedstorage.tile.externalstorage;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
public class ItemStorageDSU extends ItemStorageExternal {
private TileExternalStorage externalStorage;
@@ -26,12 +26,12 @@ public class ItemStorageDSU extends ItemStorageExternal {
}
@Override
public List<ItemStack> getStacks() {
public NonNullList<ItemStack> getStacks() {
if (unit.getStoredItemType() != null && unit.getStoredItemType().getCount() > 0) {
return Collections.singletonList(unit.getStoredItemType().copy());
return NonNullList.withSize(1, unit.getStoredItemType().copy());
}
return Collections.emptyList();
return RSUtils.emptyNonNullList();
}
@Override

View File

@@ -2,15 +2,14 @@ package com.raoulvdberge.refinedstorage.tile.externalstorage;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer;
import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable;
import com.raoulvdberge.refinedstorage.RSUtils;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.ItemHandlerHelper;
import java.util.Collections;
import java.util.List;
public class ItemStorageDrawer extends ItemStorageExternal {
private TileExternalStorage externalStorage;
private IDrawer drawer;
@@ -26,7 +25,7 @@ public class ItemStorageDrawer extends ItemStorageExternal {
}
@Override
public List<ItemStack> getStacks() {
public NonNullList<ItemStack> getStacks() {
return getStacks(drawer);
}
@@ -55,12 +54,12 @@ public class ItemStorageDrawer extends ItemStorageExternal {
return externalStorage.getAccessType();
}
public static List<ItemStack> getStacks(IDrawer drawer) {
public static NonNullList<ItemStack> getStacks(IDrawer drawer) {
if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) {
return Collections.singletonList(drawer.getStoredItemCopy());
return NonNullList.withSize(1, drawer.getStoredItemCopy());
}
return Collections.emptyList();
return RSUtils.emptyNonNullList();
}
public static ItemStack insertItem(TileExternalStorage externalStorage, IDrawer drawer, ItemStack stack, int size, boolean simulate) {

View File

@@ -2,11 +2,10 @@ package com.raoulvdberge.refinedstorage.tile.externalstorage;
import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
public class ItemStorageDrawerGroup extends ItemStorageExternal {
private TileExternalStorage externalStorage;
@@ -18,8 +17,8 @@ public class ItemStorageDrawerGroup extends ItemStorageExternal {
}
@Override
public List<ItemStack> getStacks() {
List<ItemStack> stacks = new ArrayList<>();
public NonNullList<ItemStack> getStacks() {
NonNullList<ItemStack> stacks = NonNullList.create();
for (int i = 0; i < drawers.getDrawerCount(); ++i) {
if (drawers.isDrawerEnabled(i)) {

View File

@@ -41,13 +41,13 @@ public abstract class ItemStorageExternal implements IItemStorage {
ItemStack cached = cache.get(i);
if (cached != ItemStack.EMPTY && actual == ItemStack.EMPTY) {
if (!cached.isEmpty() && actual.isEmpty()) {
// If the cached is not empty but the actual is, we remove this item
network.getItemStorageCache().remove(cached, cached.getCount());
} else if (cached == ItemStack.EMPTY && actual != ItemStack.EMPTY) {
} else if (cached.isEmpty() && !actual.isEmpty()) {
// If the cached is empty and the actual isn't, we added this item
network.getItemStorageCache().add(actual, actual.getCount(), false);
} else if (cached == ItemStack.EMPTY && actual == ItemStack.EMPTY) {
} else if (cached.isEmpty() && actual.isEmpty()) {
// If they're both empty, nothing happens
} else if (!API.instance().getComparer().isEqualNoQuantity(cached, actual)) {
// If both items mismatch, remove the old and add the new

View File

@@ -4,12 +4,11 @@ import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.config.IFilterable;
import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.List;
public class ItemStorageItemHandler extends ItemStorageExternal {
private TileExternalStorage externalStorage;
@@ -31,14 +30,14 @@ public class ItemStorageItemHandler extends ItemStorageExternal {
}
@Override
public List<ItemStack> getStacks() {
List<ItemStack> items = new ArrayList<>();
public NonNullList<ItemStack> getStacks() {
NonNullList<ItemStack> stacks = NonNullList.withSize(handler.getSlots(), ItemStack.EMPTY);
for (int i = 0; i < handler.getSlots(); ++i) {
items.add(!handler.getStackInSlot(i).isEmpty() ? handler.getStackInSlot(i).copy() : null);
stacks.set(i, handler.getStackInSlot(i).copy());
}
return items;
return stacks;
}
@Override