diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RS.java b/src/main/java/com/raoulvdberge/refinedstorage/RS.java index ef4eeab49..55a808342 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RS.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RS.java @@ -5,6 +5,10 @@ import com.raoulvdberge.refinedstorage.api.network.grid.GridType; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.storage.StorageType; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkListener; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeListener; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.factory.*; @@ -143,6 +147,12 @@ public final class RS { API.instance().addExternalStorageProvider(StorageType.ITEM, new ItemExternalStorageProvider()); API.instance().addExternalStorageProvider(StorageType.FLUID, new FluidExternalStorageProvider()); + API.instance().getCraftingPreviewElementRegistry().add(ItemCraftingPreviewElement.ID, ItemCraftingPreviewElement::read); + API.instance().getCraftingPreviewElementRegistry().add(FluidCraftingPreviewElement.ID, FluidCraftingPreviewElement::read); + API.instance().getCraftingPreviewElementRegistry().add(ErrorCraftingPreviewElement.ID, ErrorCraftingPreviewElement::read); + + API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory()); + LootFunctionManager.registerFunction(new StorageBlockLootFunctionSerializer()); LootFunctionManager.registerFunction(new PortableGridBlockLootFunctionSerializer()); LootFunctionManager.registerFunction(new CrafterLootFunctionSerializer()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java index 74fc16b0f..5fe2f3606 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java @@ -131,14 +131,14 @@ public interface ICraftingManager { int track(@Nonnull FluidStack stack, int size); /** - * @return a list of crafting patterns in this network, do NOT modify this list + * @return the crafting patterns in this network */ List getPatterns(); /** * Rebuilds the pattern list. */ - void rebuild(); + void invalidate(); /** * Return a crafting pattern from an item stack. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java index ede71ccfa..3bef4fc48 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingPattern.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting; import net.minecraft.item.ItemStack; import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidStack; import java.util.List; @@ -75,7 +76,7 @@ public interface ICraftingPattern { /** * @return the id of the factory that creates a crafting task for this pattern, as defined in the {@link com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry} */ - String getId(); + ResourceLocation getId(); /** * @param other the other pattern diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElement.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElement.java index cadfd1e77..6d4968748 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElement.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElement.java @@ -1,8 +1,8 @@ package com.raoulvdberge.refinedstorage.api.autocrafting.preview; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; -import io.netty.buffer.ByteBuf; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -43,12 +43,12 @@ public interface ICraftingPreviewElement { /** * @param buf buffer to write to */ - void writeToByteBuf(PacketBuffer buf); + void write(PacketBuffer buf); /** * Returns the id of this element, used for serialization and deserialization over the network. * * @return the id */ - String getId(); + ResourceLocation getId(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElementRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElementRegistry.java index 3f0debe77..ad524f147 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElementRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/preview/ICraftingPreviewElementRegistry.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting.preview; -import io.netty.buffer.ByteBuf; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import javax.annotation.Nullable; import java.util.function.Function; @@ -15,7 +16,7 @@ public interface ICraftingPreviewElementRegistry { * @param id the id, as specified in {@link ICraftingPreviewElement#getId()} * @param factory the factory */ - void add(String id, Function factory); + void add(ResourceLocation id, Function factory); /** * Returns a factory from the registry. @@ -24,5 +25,5 @@ public interface ICraftingPreviewElementRegistry { * @return the factory, or null if no factory was found */ @Nullable - Function get(String id); + Function get(ResourceLocation id); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/registry/ICraftingTaskRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/registry/ICraftingTaskRegistry.java index d78d31c5f..5d6596d92 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/registry/ICraftingTaskRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/registry/ICraftingTaskRegistry.java @@ -1,5 +1,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting.registry; +import net.minecraft.util.ResourceLocation; + import javax.annotation.Nullable; /** @@ -14,7 +16,7 @@ public interface ICraftingTaskRegistry { * @param id the id of the factory * @param factory the factory */ - void add(String id, ICraftingTaskFactory factory); + void add(ResourceLocation id, ICraftingTaskFactory factory); /** * Returns the crafting task factory by factory id. @@ -23,5 +25,5 @@ public interface ICraftingTaskRegistry { * @return the factory, or null if there is no factory */ @Nullable - ICraftingTaskFactory get(String id); + ICraftingTaskFactory get(ResourceLocation id); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/cache/IStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/cache/IStorageCache.java index 87114e4e4..3c124fe55 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/storage/cache/IStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/storage/cache/IStorageCache.java @@ -80,6 +80,11 @@ public interface IStorageCache { */ IStackList getList(); + /** + * @return a list of craftables + */ + IStackList getCraftablesList(); + /** * @return the storages connected to this network */ diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java index 151b5aba5..802ab1e2a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java @@ -16,6 +16,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.ListNBT; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandlerModifiable; @@ -128,7 +129,7 @@ public class CraftingManager implements ICraftingManager { for (int i = 0; i < tasksToRead.size(); ++i) { CompoundNBT taskTag = tasksToRead.getCompound(i); - String taskType = taskTag.getString(NBT_TASK_TYPE); + ResourceLocation taskType = new ResourceLocation(taskTag.getString(NBT_TASK_TYPE)); CompoundNBT taskData = taskTag.getCompound(NBT_TASK_DATA); ICraftingTaskFactory factory = API.instance().getCraftingTaskRegistry().get(taskType); @@ -196,7 +197,7 @@ public class CraftingManager implements ICraftingManager { for (ICraftingTask task : tasks.values()) { CompoundNBT taskTag = new CompoundNBT(); - taskTag.putString(NBT_TASK_TYPE, task.getPattern().getId()); + taskTag.putString(NBT_TASK_TYPE, task.getPattern().getId().toString()); taskTag.put(NBT_TASK_DATA, task.writeToNbt(new CompoundNBT())); list.add(taskTag); @@ -355,7 +356,10 @@ public class CraftingManager implements ICraftingManager { } @Override - public void rebuild() { + public void invalidate() { + this.network.getItemStorageCache().getCraftablesList().clear(); + this.network.getFluidStorageCache().getCraftablesList().clear(); + this.patterns.clear(); this.containerInventories.clear(); @@ -370,7 +374,17 @@ public class CraftingManager implements ICraftingManager { containers.sort((a, b) -> b.getPosition().compareTo(a.getPosition())); for (ICraftingPatternContainer container : containers) { - this.patterns.addAll(container.getPatterns()); + for (ICraftingPattern pattern : container.getPatterns()) { + this.patterns.add(pattern); + + for (ItemStack output : pattern.getOutputs()) { + network.getItemStorageCache().getCraftablesList().add(output); + } + + for (FluidStack output : pattern.getFluidOutputs()) { + network.getFluidStorageCache().getCraftablesList().add(output); + } + } IItemHandlerModifiable handler = container.getPatternInventory(); if (handler != null) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java index a441b0b22..69a1207b6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPattern.java @@ -14,6 +14,7 @@ import net.minecraft.item.crafting.ICraftingRecipe; import net.minecraft.item.crafting.IRecipeType; import net.minecraft.item.crafting.Ingredient; import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; @@ -82,14 +83,14 @@ public class CraftingPattern implements ICraftingPattern { } FluidStack fluidInput = PatternItem.getFluidInputSlot(stack, i); - if (fluidInput != null) { + if (!fluidInput.isEmpty()) { this.valid = true; fluidInputs.add(fluidInput); } FluidStack fluidOutput = PatternItem.getFluidOutputSlot(stack, i); - if (fluidOutput != null) { + if (!fluidOutput.isEmpty()) { this.valid = true; fluidOutputs.add(fluidOutput); @@ -241,7 +242,7 @@ public class CraftingPattern implements ICraftingPattern { } @Override - public String getId() { + public ResourceLocation getId() { return CraftingTaskFactory.ID; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPatternChainList.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPatternChainList.java index c28dec052..92d40871c 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPatternChainList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingPatternChainList.java @@ -4,30 +4,21 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternChain; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternChainList; +import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; public class CraftingPatternChainList implements ICraftingPatternChainList { - /*private Map map = new TCustomHashMap<>(new HashingStrategy() { - @Override - public int computeHashCode(ICraftingPattern pattern) { - return pattern.getChainHashCode(); - } + private final Map map = new HashMap<>(); - @Override - public boolean equals(ICraftingPattern left, ICraftingPattern right) { - return left.canBeInChainWith(right); - } - });*/ - // TODO: broken - private Map map = new HashMap<>(); - - public CraftingPatternChainList(List patterns) { + public CraftingPatternChainList(Collection patterns) { for (ICraftingPattern pattern : patterns) { - CraftingPatternChain chain = map.get(pattern); + Key key = new Key(pattern); + + CraftingPatternChain chain = map.get(key); + if (chain == null) { - map.put(pattern, chain = new CraftingPatternChain()); + map.put(key, chain = new CraftingPatternChain()); } chain.addPattern(pattern); @@ -36,11 +27,30 @@ public class CraftingPatternChainList implements ICraftingPatternChainList { @Override public ICraftingPatternChain getChain(ICraftingPattern pattern) { - ICraftingPatternChain chain = map.get(pattern); + ICraftingPatternChain chain = map.get(new Key(pattern)); + if (chain == null) { throw new IllegalStateException("Pattern was not found in pattern chain"); } return chain; } + + private class Key { + private final ICraftingPattern pattern; + + public Key(ICraftingPattern pattern) { + this.pattern = pattern; + } + + @Override + public boolean equals(Object other) { + return other instanceof Key && pattern.canBeInChainWith(((Key) other).pattern); + } + + @Override + public int hashCode() { + return pattern.getChainHashCode(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementRegistry.java index c668d236f..7101c142d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementRegistry.java @@ -2,7 +2,8 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElementRegistry; -import io.netty.buffer.ByteBuf; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import javax.annotation.Nullable; import java.util.HashMap; @@ -10,16 +11,16 @@ import java.util.Map; import java.util.function.Function; public class CraftingPreviewElementRegistry implements ICraftingPreviewElementRegistry { - private Map> registry = new HashMap<>(); + private Map> registry = new HashMap<>(); @Override - public void add(String id, Function factory) { + public void add(ResourceLocation id, Function factory) { registry.put(id, factory); } @Nullable @Override - public Function get(String id) { + public Function get(ResourceLocation id) { return registry.get(id); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementError.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/ErrorCraftingPreviewElement.java similarity index 59% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementError.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/ErrorCraftingPreviewElement.java index 46b898c0b..ddf759426 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementError.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/ErrorCraftingPreviewElement.java @@ -1,20 +1,20 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskErrorType; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; -public class CraftingPreviewElementError implements ICraftingPreviewElement { - public static final String ID = "error"; +public class ErrorCraftingPreviewElement implements ICraftingPreviewElement { + public static final ResourceLocation ID = new ResourceLocation(RS.ID, "error"); private CraftingTaskErrorType type; private ItemStack stack; - public CraftingPreviewElementError(CraftingTaskErrorType type, ItemStack stack) { + public ErrorCraftingPreviewElement(CraftingTaskErrorType type, ItemStack stack) { this.type = type; this.stack = stack; } @@ -44,36 +44,26 @@ public class CraftingPreviewElementError implements ICraftingPreviewElement= 0 && errorIdx < CraftingTaskErrorType.values().length ? CraftingTaskErrorType.values()[errorIdx] : CraftingTaskErrorType.TOO_COMPLEX; + ItemStack stack = buf.readItemStack(); - // TODO can't we use readItemStack here? - Item item = Item.getItemById(buf.readInt()); - CompoundNBT tag = buf.readCompoundTag(); - - ItemStack stack = new ItemStack(item, 1); - stack.setTag(tag); - - return new CraftingPreviewElementError(error, stack); + return new ErrorCraftingPreviewElement(error, stack); } @Override - public String getId() { + public ResourceLocation getId() { return ID; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementFluidStack.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/FluidCraftingPreviewElement.java old mode 100755 new mode 100644 similarity index 78% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementFluidStack.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/FluidCraftingPreviewElement.java index d0de32f47..4ac10a54e --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementFluidStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/FluidCraftingPreviewElement.java @@ -1,6 +1,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview; import com.mojang.blaze3d.platform.GlStateManager; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.apiimpl.API; @@ -8,12 +9,13 @@ import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fluids.FluidStack; -public class CraftingPreviewElementFluidStack implements ICraftingPreviewElement { - public static final String ID = "fluid_renderer"; +public class FluidCraftingPreviewElement implements ICraftingPreviewElement { + public static final ResourceLocation ID = new ResourceLocation(RS.ID, "fluid"); private FluidStack stack; private int available; @@ -21,34 +23,32 @@ public class CraftingPreviewElementFluidStack implements ICraftingPreviewElement // If missing is true then toCraft is the missing amount private int toCraft; - public CraftingPreviewElementFluidStack(FluidStack stack) { + public FluidCraftingPreviewElement(FluidStack stack) { this.stack = stack.copy(); } - public CraftingPreviewElementFluidStack(FluidStack stack, int available, boolean missing, int toCraft) { + public FluidCraftingPreviewElement(FluidStack stack, int available, boolean missing, int toCraft) { this.stack = stack.copy(); this.available = available; this.missing = missing; this.toCraft = toCraft; } - // TODO ren @Override - public void writeToByteBuf(PacketBuffer buf) { + public void write(PacketBuffer buf) { stack.writeToPacket(buf); buf.writeInt(available); buf.writeBoolean(missing); buf.writeInt(toCraft); } - //TODO ren - public static CraftingPreviewElementFluidStack fromByteBuf(PacketBuffer buf) { + public static FluidCraftingPreviewElement read(PacketBuffer buf) { FluidStack stack = FluidStack.readFromPacket(buf); int available = buf.readInt(); boolean missing = buf.readBoolean(); int toCraft = buf.readInt(); - return new CraftingPreviewElementFluidStack(stack, available, missing, toCraft); + return new FluidCraftingPreviewElement(stack, available, missing, toCraft); } @Override @@ -76,14 +76,14 @@ public class CraftingPreviewElementFluidStack implements ICraftingPreviewElement GlStateManager.scalef(scale, scale, 1); if (getToCraft() > 0) { - String format = hasMissing() ? "gui.refinedstorage:crafting_preview.missing" : "gui.refinedstorage:crafting_preview.to_craft"; + String format = hasMissing() ? "gui.refinedstorage.crafting_preview.missing" : "gui.refinedstorage.crafting_preview.to_craft"; drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 23, scale), RenderUtils.getOffsetOnScale(y, scale), I18n.format(format, API.instance().getQuantityFormatter().formatInBucketForm(getToCraft()))); y += 7; } if (getAvailable() > 0) { - drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 23, scale), RenderUtils.getOffsetOnScale(y, scale), I18n.format("gui.refinedstorage:crafting_preview.available", API.instance().getQuantityFormatter().formatInBucketForm(getAvailable()))); + drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 23, scale), RenderUtils.getOffsetOnScale(y, scale), I18n.format("gui.refinedstorage.crafting_preview.available", API.instance().getQuantityFormatter().formatInBucketForm(getAvailable()))); } GlStateManager.popMatrix(); @@ -117,7 +117,7 @@ public class CraftingPreviewElementFluidStack implements ICraftingPreviewElement } @Override - public String getId() { + public ResourceLocation getId() { return ID; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementItemStack.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/ItemCraftingPreviewElement.java old mode 100755 new mode 100644 similarity index 69% rename from src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementItemStack.java rename to src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/ItemCraftingPreviewElement.java index add019087..368b520b3 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/CraftingPreviewElementItemStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/preview/ItemCraftingPreviewElement.java @@ -1,21 +1,21 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview; import com.mojang.blaze3d.platform.GlStateManager; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.items.ItemHandlerHelper; -public class CraftingPreviewElementItemStack implements ICraftingPreviewElement { - public static final String ID = "item_renderer"; +public class ItemCraftingPreviewElement implements ICraftingPreviewElement { + public static final ResourceLocation ID = new ResourceLocation(RS.ID, "item"); private ItemStack stack; private int available; @@ -23,42 +23,32 @@ public class CraftingPreviewElementItemStack implements ICraftingPreviewElement< // If missing is true then toCraft is the missing amount private int toCraft; - public CraftingPreviewElementItemStack(ItemStack stack) { + public ItemCraftingPreviewElement(ItemStack stack) { this.stack = ItemHandlerHelper.copyStackWithSize(stack, 1); } - public CraftingPreviewElementItemStack(ItemStack stack, int available, boolean missing, int toCraft) { + public ItemCraftingPreviewElement(ItemStack stack, int available, boolean missing, int toCraft) { this.stack = stack; this.available = available; this.missing = missing; this.toCraft = toCraft; } - // TODO ren @Override - public void writeToByteBuf(PacketBuffer buf) { - // TODO can't we use writeItemSTack - buf.writeInt(Item.getIdFromItem(stack.getItem())); - buf.writeCompoundTag(stack.getTag()); + public void write(PacketBuffer buf) { + buf.writeItemStack(stack); buf.writeInt(available); buf.writeBoolean(missing); buf.writeInt(toCraft); } - // TODO ren - public static CraftingPreviewElementItemStack fromByteBuf(PacketBuffer buf) { - // TODO readItemStack - - Item item = Item.getItemById(buf.readInt()); - CompoundNBT tag = buf.readCompoundTag(); + public static ItemCraftingPreviewElement read(PacketBuffer buf) { + ItemStack stack = buf.readItemStack(); int available = buf.readInt(); boolean missing = buf.readBoolean(); int toCraft = buf.readInt(); - ItemStack stack = new ItemStack(item, 1); - stack.setTag(tag); - - return new CraftingPreviewElementItemStack(stack, available, missing, toCraft); + return new ItemCraftingPreviewElement(stack, available, missing, toCraft); } @Override @@ -86,14 +76,14 @@ public class CraftingPreviewElementItemStack implements ICraftingPreviewElement< GlStateManager.scalef(scale, scale, 1); if (getToCraft() > 0) { - String format = hasMissing() ? "gui.refinedstorage:crafting_preview.missing" : "gui.refinedstorage:crafting_preview.to_craft"; + String format = hasMissing() ? "gui.refinedstorage.crafting_preview.missing" : "gui.refinedstorage.crafting_preview.to_craft"; drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 23, scale), RenderUtils.getOffsetOnScale(y, scale), I18n.format(format, getToCraft())); y += 7; } if (getAvailable() > 0) { - drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 23, scale), RenderUtils.getOffsetOnScale(y, scale), I18n.format("gui.refinedstorage:crafting_preview.available", getAvailable())); + drawers.getStringDrawer().draw(RenderUtils.getOffsetOnScale(x + 23, scale), RenderUtils.getOffsetOnScale(y, scale), I18n.format("gui.refinedstorage.crafting_preview.available", getAvailable())); } GlStateManager.popMatrix(); @@ -127,7 +117,7 @@ public class CraftingPreviewElementItemStack implements ICraftingPreviewElement< } @Override - public String getId() { + public ResourceLocation getId() { return ID; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactory.java index 37018b86d..d4ed86471 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskFactory.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException; @@ -8,11 +9,12 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.ResourceLocation; import javax.annotation.Nonnull; public class CraftingTaskFactory implements ICraftingTaskFactory { - public static final String ID = "normal"; + public static final ResourceLocation ID = new ResourceLocation(RS.ID, "default"); @Nonnull @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskRegistry.java index b4f1828fb..bcafb9d11 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskRegistry.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/registry/CraftingTaskRegistry.java @@ -2,22 +2,23 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry; import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskFactory; import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskRegistry; +import net.minecraft.util.ResourceLocation; import javax.annotation.Nullable; import java.util.HashMap; import java.util.Map; public class CraftingTaskRegistry implements ICraftingTaskRegistry { - private Map registry = new HashMap<>(); + private Map registry = new HashMap<>(); @Override - public void add(String id, ICraftingTaskFactory factory) { + public void add(ResourceLocation id, ICraftingTaskFactory factory) { registry.put(id, factory); } @Override @Nullable - public ICraftingTaskFactory get(String id) { + public ICraftingTaskFactory get(ResourceLocation id) { return registry.get(id); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java index fc03b72fe..50883b254 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java @@ -1,7 +1,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task; import com.google.common.collect.Maps; -import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.*; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement; import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElementList; @@ -18,8 +17,8 @@ import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementError; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementFluidRender; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.craftingmonitor.CraftingMonitorElementItemRender; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.FluidStorageDisk; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.ItemStorageDisk; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.factory.FluidStorageDiskFactory; @@ -332,9 +331,10 @@ public class CraftingTask implements ICraftingTask { ICraftingPattern pattern, boolean root) { + /* TODO if (System.currentTimeMillis() - calculationStarted > RS.INSTANCE.config.calculationTimeoutMs) { return new CraftingTaskError(CraftingTaskErrorType.TOO_COMPLEX); - } + }*/ if (!patternsUsed.add(pattern)) { return new CraftingTaskError(CraftingTaskErrorType.RECURSIVE, pattern); @@ -1111,16 +1111,16 @@ public class CraftingTask implements ICraftingTask { @Override public List getPreviewStacks() { - Map map = new LinkedHashMap<>(); - Map mapFluids = new LinkedHashMap<>(); + Map map = new LinkedHashMap<>(); + Map mapFluids = new LinkedHashMap<>(); for (StackListEntry stack : toCraft.getStacks()) { int hash = API.instance().getItemStackHashCode(stack.getStack()); - CraftingPreviewElementItemStack previewStack = map.get(hash); + ItemCraftingPreviewElement previewStack = map.get(hash); if (previewStack == null) { - previewStack = new CraftingPreviewElementItemStack(stack.getStack()); + previewStack = new ItemCraftingPreviewElement(stack.getStack()); } previewStack.addToCraft(stack.getStack().getCount()); @@ -1131,10 +1131,10 @@ public class CraftingTask implements ICraftingTask { for (StackListEntry stack : toCraftFluids.getStacks()) { int hash = API.instance().getFluidStackHashCode(stack.getStack()); - CraftingPreviewElementFluidStack previewStack = mapFluids.get(hash); + FluidCraftingPreviewElement previewStack = mapFluids.get(hash); if (previewStack == null) { - previewStack = new CraftingPreviewElementFluidStack(stack.getStack()); + previewStack = new FluidCraftingPreviewElement(stack.getStack()); } previewStack.addToCraft(stack.getStack().getAmount()); @@ -1145,10 +1145,10 @@ public class CraftingTask implements ICraftingTask { for (StackListEntry stack : missing.getStacks()) { int hash = API.instance().getItemStackHashCode(stack.getStack()); - CraftingPreviewElementItemStack previewStack = map.get(hash); + ItemCraftingPreviewElement previewStack = map.get(hash); if (previewStack == null) { - previewStack = new CraftingPreviewElementItemStack(stack.getStack()); + previewStack = new ItemCraftingPreviewElement(stack.getStack()); } previewStack.setMissing(true); @@ -1160,10 +1160,10 @@ public class CraftingTask implements ICraftingTask { for (StackListEntry stack : missingFluids.getStacks()) { int hash = API.instance().getFluidStackHashCode(stack.getStack()); - CraftingPreviewElementFluidStack previewStack = mapFluids.get(hash); + FluidCraftingPreviewElement previewStack = mapFluids.get(hash); if (previewStack == null) { - previewStack = new CraftingPreviewElementFluidStack(stack.getStack()); + previewStack = new FluidCraftingPreviewElement(stack.getStack()); } previewStack.setMissing(true); @@ -1175,10 +1175,10 @@ public class CraftingTask implements ICraftingTask { for (StackListEntry stack : toTake.getStacks()) { int hash = API.instance().getItemStackHashCode(stack.getStack()); - CraftingPreviewElementItemStack previewStack = map.get(hash); + ItemCraftingPreviewElement previewStack = map.get(hash); if (previewStack == null) { - previewStack = new CraftingPreviewElementItemStack(stack.getStack()); + previewStack = new ItemCraftingPreviewElement(stack.getStack()); } previewStack.addAvailable(stack.getStack().getCount()); @@ -1189,10 +1189,10 @@ public class CraftingTask implements ICraftingTask { for (StackListEntry stack : toTakeFluids.getStacks()) { int hash = API.instance().getFluidStackHashCode(stack.getStack()); - CraftingPreviewElementFluidStack previewStack = mapFluids.get(hash); + FluidCraftingPreviewElement previewStack = mapFluids.get(hash); if (previewStack == null) { - previewStack = new CraftingPreviewElementFluidStack(stack.getStack()); + previewStack = new FluidCraftingPreviewElement(stack.getStack()); } previewStack.addAvailable(stack.getStack().getAmount()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 08b120195..d44adc176 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -1,15 +1,16 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.api.util.Action; -import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingPreviewResponseMessage; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingStartResponseMessage; import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.inventory.InventoryHelper; @@ -21,6 +22,7 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; +import java.util.Collections; import java.util.UUID; public class FluidGridHandler implements IFluidGridHandler { @@ -114,15 +116,7 @@ public class FluidGridHandler implements IFluidGridHandler { return; } - IStackList cache = API.instance().createFluidStackList(); - - for (ICraftingPattern pattern : network.getCraftingManager().getPatterns()) { - for (FluidStack output : pattern.getFluidOutputs()) { - cache.add(output); - } - } - - FluidStack stack = cache.get(id); + FluidStack stack = network.getFluidStorageCache().getCraftablesList().get(id); if (stack != null) { Thread calculationThread = new Thread(() -> { @@ -134,13 +128,29 @@ public class FluidGridHandler implements IFluidGridHandler { ICraftingTaskError error = task.calculate(); if (error != null) { - // TODO: Networking RS.INSTANCE.network.sendTo(new MessageGridCraftingPreviewResponse(Collections.singletonList(new CraftingPreviewElementError(error.getType(), error.getRecursedPattern() == null ? ItemStack.EMPTY : error.getRecursedPattern().getStack())), hash, quantity, true), player); + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + Collections.singletonList(new ErrorCraftingPreviewElement(error.getType(), error.getRecursedPattern() == null ? ItemStack.EMPTY : error.getRecursedPattern().getStack())), + id, + quantity, + false + ) + ); } else if (noPreview && !task.hasMissing()) { network.getCraftingManager().add(task); - // TODO: Networking RS.INSTANCE.network.sendTo(new MessageGridCraftingStartResponse(), player); + RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); } else { - // TODO: Networking RS.INSTANCE.network.sendTo(new MessageGridCraftingPreviewResponse(task.getPreviewStacks(), hash, quantity, true), player); + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + task.getPreviewStacks(), + id, + quantity, + false + ) + ); } }, "RS crafting preview calculation"); @@ -154,21 +164,7 @@ public class FluidGridHandler implements IFluidGridHandler { return; } - FluidStack stack = null; - - for (ICraftingPattern pattern : network.getCraftingManager().getPatterns()) { - for (FluidStack output : pattern.getFluidOutputs()) { - if (/* TODO API.instance().getFluidStackHashCode(output) == hash*/false) { - stack = output; - - break; - } - } - - if (stack != null) { - break; - } - } + FluidStack stack = network.getFluidStorageCache().getCraftablesList().get(id); if (stack != null) { ICraftingTask task = network.getCraftingManager().create(stack, quantity); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 2a40fcc8a..efdff68f2 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -1,15 +1,16 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.api.util.Action; -import com.raoulvdberge.refinedstorage.api.util.IStackList; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingPreviewResponseMessage; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingStartResponseMessage; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.Direction; @@ -19,6 +20,7 @@ import net.minecraftforge.items.ItemHandlerHelper; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import java.util.Collections; import java.util.UUID; public class ItemGridHandler implements IItemGridHandler { @@ -152,15 +154,7 @@ public class ItemGridHandler implements IItemGridHandler { return; } - IStackList cache = API.instance().createItemStackList(); - - for (ICraftingPattern pattern : network.getCraftingManager().getPatterns()) { - for (ItemStack output : pattern.getOutputs()) { - cache.add(output); - } - } - - ItemStack stack = cache.get(id); + ItemStack stack = network.getItemStorageCache().getCraftablesList().get(id); if (stack != null) { Thread calculationThread = new Thread(() -> { @@ -172,13 +166,29 @@ public class ItemGridHandler implements IItemGridHandler { ICraftingTaskError error = task.calculate(); if (error != null) { - // TODO RS.INSTANCE.network.sendTo(new MessageGridCraftingPreviewResponse(Collections.singletonList(new CraftingPreviewElementError(error.getType(), error.getRecursedPattern() == null ? ItemStack.EMPTY : error.getRecursedPattern().getStack())), hash, quantity, false), player); + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + Collections.singletonList(new ErrorCraftingPreviewElement(error.getType(), error.getRecursedPattern() == null ? ItemStack.EMPTY : error.getRecursedPattern().getStack())), + id, + quantity, + false + ) + ); } else if (noPreview && !task.hasMissing()) { network.getCraftingManager().add(task); - // TODO RS.INSTANCE.network.sendTo(new MessageGridCraftingStartResponse(), player); + RS.NETWORK_HANDLER.sendTo(player, new GridCraftingStartResponseMessage()); } else { - // TODO RS.INSTANCE.network.sendTo(new MessageGridCraftingPreviewResponse(task.getPreviewStacks(), hash, quantity, false), player); + RS.NETWORK_HANDLER.sendTo( + player, + new GridCraftingPreviewResponseMessage( + task.getPreviewStacks(), + id, + quantity, + false + ) + ); } }, "RS crafting preview calculation"); @@ -192,21 +202,7 @@ public class ItemGridHandler implements IItemGridHandler { return; } - ItemStack stack = null; - - for (ICraftingPattern pattern : network.getCraftingManager().getPatterns()) { - for (ItemStack output : pattern.getOutputs()) { - if (/* TODO API.instance().getItemStackHashCode(output) == hash*/false) { - stack = output; - - break; - } - } - - if (stack != null) { - break; - } - } + ItemStack stack = network.getItemStorageCache().getCraftablesList().get(id); if (stack != null) { ICraftingTask task = network.getCraftingManager().create(stack, quantity); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java index d3b806edb..c6ec4729a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/CrafterNetworkNode.java @@ -77,7 +77,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC } if (network != null) { - network.getCraftingManager().rebuild(); + network.getCraftingManager().invalidate(); } } }); @@ -151,7 +151,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC protected void onConnectedStateChange(INetwork network, boolean state) { super.onConnectedStateChange(network, state); - network.getCraftingManager().rebuild(); + network.getCraftingManager().invalidate(); } @Override @@ -168,7 +168,7 @@ public class CrafterNetworkNode extends NetworkNode implements ICraftingPatternC super.onDirectionChanged(direction); if (network != null) { - network.getCraftingManager().rebuild(); + network.getCraftingManager().invalidate(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingMonitorElementDrawers.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingMonitorElementDrawers.java index 61b4327da..e23738147 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingMonitorElementDrawers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingMonitorElementDrawers.java @@ -22,8 +22,8 @@ public class CraftingMonitorElementDrawers extends ElementDrawers { GlStateManager.color4f(1, 1, 1, 1); GlStateManager.disableLighting(); - gui.bindTexture(RS.ID, "gui/crafting_preview.png"); - gui.blit(x + itemWidth - 12 - 2, y + itemHeight - 12 - 2, 0, 244, 12, 12); + screen.bindTexture(RS.ID, "gui/crafting_preview.png"); + screen.blit(x + itemWidth - 12 - 2, y + itemHeight - 12 - 2, 0, 244, 12, 12); }; public CraftingMonitorElementDrawers(BaseScreen gui, FontRenderer fontRenderer, int itemWidth, int itemHeight) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingPreviewElementDrawers.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingPreviewElementDrawers.java index 9815f0ad1..2079ff7bd 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingPreviewElementDrawers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/CraftingPreviewElementDrawers.java @@ -2,22 +2,22 @@ package com.raoulvdberge.refinedstorage.apiimpl.render; import com.mojang.blaze3d.platform.GlStateManager; import com.raoulvdberge.refinedstorage.api.render.IElementDrawer; -import com.raoulvdberge.refinedstorage.screen.GuiCraftingPreview; +import com.raoulvdberge.refinedstorage.screen.grid.CraftingPreviewScreen; import net.minecraft.client.gui.FontRenderer; public class CraftingPreviewElementDrawers extends ElementDrawers { - private GuiCraftingPreview gui; + private CraftingPreviewScreen screen; private IElementDrawer overlayDrawer = (x, y, colour) -> { GlStateManager.color4f(1, 1, 1, 1); GlStateManager.disableLighting(); - gui.fill(x, y, x + 73, y + 29, colour); + screen.fill(x, y, x + 73, y + 29, colour); }; - public CraftingPreviewElementDrawers(GuiCraftingPreview gui, FontRenderer fontRenderer) { - super(gui, fontRenderer); + public CraftingPreviewElementDrawers(CraftingPreviewScreen screen, FontRenderer fontRenderer) { + super(screen, fontRenderer); - this.gui = gui; + this.screen = screen; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/ElementDrawers.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/ElementDrawers.java index c378b5ac4..a150a405e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/ElementDrawers.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/render/ElementDrawers.java @@ -9,17 +9,17 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; public class ElementDrawers implements IElementDrawers { - protected BaseScreen gui; + protected BaseScreen screen; private FontRenderer fontRenderer; - public ElementDrawers(BaseScreen gui, FontRenderer fontRenderer) { - this.gui = gui; + public ElementDrawers(BaseScreen screen, FontRenderer fontRenderer) { + this.screen = screen; this.fontRenderer = fontRenderer; } @Override public IElementDrawer getItemDrawer() { - return gui::renderItem; + return screen::renderItem; } @Override @@ -29,7 +29,7 @@ public class ElementDrawers implements IElementDrawers { @Override public IElementDrawer getStringDrawer() { - return gui::renderString; + return screen::renderString; } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java index 5c34d8647..cb62a40d6 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/FluidStorageCache.java @@ -21,11 +21,12 @@ import java.util.function.Consumer; public class FluidStorageCache implements IStorageCache { public static final Consumer INVALIDATE = n -> n.getFluidStorageCache().invalidate(); - private INetwork network; - private CopyOnWriteArrayList> storages = new CopyOnWriteArrayList<>(); - private IStackList list = API.instance().createFluidStackList(); - private List> listeners = new LinkedList<>(); - private List> batchedChanges = new ArrayList<>(); + private final INetwork network; + private final CopyOnWriteArrayList> storages = new CopyOnWriteArrayList<>(); + private final IStackList list = API.instance().createFluidStackList(); + private final IStackList craftables = API.instance().createFluidStackList(); + private final List> listeners = new LinkedList<>(); + private final List> batchedChanges = new ArrayList<>(); public FluidStorageCache(INetwork network) { this.network = network; @@ -117,6 +118,11 @@ public class FluidStorageCache implements IStorageCache { return list; } + @Override + public IStackList getCraftablesList() { + return craftables; + } + @Override public List> getStorages() { return storages; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/ItemStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/ItemStorageCache.java index c2af3da70..b1e80e740 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/ItemStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/ItemStorageCache.java @@ -21,11 +21,12 @@ import java.util.function.Consumer; public class ItemStorageCache implements IStorageCache { public static final Consumer INVALIDATE = network -> network.getItemStorageCache().invalidate(); - private INetwork network; - private CopyOnWriteArrayList> storages = new CopyOnWriteArrayList<>(); - private IStackList list = API.instance().createItemStackList(); - private List> listeners = new LinkedList<>(); - private List> batchedChanges = new ArrayList<>(); + private final INetwork network; + private final CopyOnWriteArrayList> storages = new CopyOnWriteArrayList<>(); + private final IStackList list = API.instance().createItemStackList(); + private final IStackList craftables = API.instance().createItemStackList(); + private final List> listeners = new LinkedList<>(); + private final List> batchedChanges = new ArrayList<>(); public ItemStorageCache(INetwork network) { this.network = network; @@ -119,6 +120,11 @@ public class ItemStorageCache implements IStorageCache { return list; } + @Override + public IStackList getCraftablesList() { + return craftables; + } + @Override public List> getStorages() { return storages; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableFluidStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableFluidStorageCache.java index 1d6bbe3e1..b324f37d0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableFluidStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableFluidStorageCache.java @@ -79,6 +79,11 @@ public class PortableFluidStorageCache implements IStorageCache { return list; } + @Override + public IStackList getCraftablesList() { + throw new RuntimeException("Unsupported"); + } + @Override public List> getStorages() { return Collections.emptyList(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableItemStorageCache.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableItemStorageCache.java index 3901b984a..b02e22152 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableItemStorageCache.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/cache/PortableItemStorageCache.java @@ -79,6 +79,11 @@ public class PortableItemStorageCache implements IStorageCache { return list; } + @Override + public IStackList getCraftablesList() { + throw new RuntimeException("Unsupported"); + } + @Override public List> getStorages() { return Collections.emptyList(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java index 8437c7f46..7a2ec9bee 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/FluidStorageDisk.java @@ -27,6 +27,7 @@ public class FluidStorageDisk implements IStorageDisk { public static final String NBT_FLUIDS = "Fluids"; public static final int VERSION = 1; + @Nullable private ServerWorld world; private int capacity; private Multimap stacks = ArrayListMultimap.create(); @@ -35,11 +36,7 @@ public class FluidStorageDisk implements IStorageDisk { private IStorageDiskListener listener; private IStorageDiskContainerContext context; - public FluidStorageDisk(ServerWorld world, int capacity) { - if (world == null) { - throw new IllegalArgumentException("World cannot be null"); - } - + public FluidStorageDisk(@Nullable ServerWorld world, int capacity) { this.world = world; this.capacity = capacity; } @@ -205,6 +202,8 @@ public class FluidStorageDisk implements IStorageDisk { listener.onChanged(); } - API.instance().getStorageDiskManager(world).markForSaving(); + if (world != null) { + API.instance().getStorageDiskManager(world).markForSaving(); + } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java index f1603f441..6a0673e4b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java @@ -28,6 +28,7 @@ public class ItemStorageDisk implements IStorageDisk { public static final String NBT_ITEMS = "Items"; public static final int VERSION = 1; + @Nullable private ServerWorld world; private int capacity; private Multimap stacks = ArrayListMultimap.create(); @@ -36,11 +37,7 @@ public class ItemStorageDisk implements IStorageDisk { private IStorageDiskListener listener; private IStorageDiskContainerContext context; - public ItemStorageDisk(ServerWorld world, int capacity) { - if (world == null) { - throw new IllegalArgumentException("World cannot be null"); - } - + public ItemStorageDisk(@Nullable ServerWorld world, int capacity) { this.world = world; this.capacity = capacity; } @@ -206,6 +203,8 @@ public class ItemStorageDisk implements IStorageDisk { listener.onChanged(); } - API.instance().getStorageDiskManager(world).markForSaving(); + if (world != null) { + API.instance().getStorageDiskManager(world).markForSaving(); + } } } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java index e964f20d2..2b2ccdfb0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/util/FluidStackList.java @@ -21,7 +21,7 @@ public class FluidStackList implements IStackList { @Override public StackListResult add(@Nonnull FluidStack stack, int size) { - if (size < 0) { + if (stack.isEmpty() || size <= 0) { throw new IllegalArgumentException("Cannot accept empty stack"); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingPreview.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingPreview.java.off deleted file mode 100644 index f7c7a26ef..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingPreview.java.off +++ /dev/null @@ -1,60 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.container.GridContainer; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.Container; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; - -public class MessageGridCraftingPreview extends MessageHandlerPlayerToServer implements IMessage { - private int hash; - private int quantity; - private boolean noPreview; - private boolean fluids; - - public MessageGridCraftingPreview() { - } - - public MessageGridCraftingPreview(int hash, int quantity, boolean noPreview, boolean fluids) { - this.hash = hash; - this.quantity = quantity; - this.noPreview = noPreview; - this.fluids = fluids; - } - - @Override - public void fromBytes(ByteBuf buf) { - hash = buf.readInt(); - quantity = buf.readInt(); - noPreview = buf.readBoolean(); - fluids = buf.readBoolean(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(hash); - buf.writeInt(quantity); - buf.writeBoolean(noPreview); - buf.writeBoolean(fluids); - } - - @Override - public void handle(MessageGridCraftingPreview message, ServerPlayerEntity player) { - Container container = player.openContainer; - - if (container instanceof ContainerGrid) { - IGrid grid = ((ContainerGrid) container).getGrid(); - - if (message.fluids) { - if (grid.getFluidHandler() != null) { - grid.getFluidHandler().onCraftingPreviewRequested(player, message.hash, message.quantity, message.noPreview); - } - } else { - if (grid.getItemHandler() != null) { - grid.getItemHandler().onCraftingPreviewRequested(player, message.hash, message.quantity, message.noPreview); - } - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingPreviewResponse.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingPreviewResponse.java.off deleted file mode 100644 index 19a7a12b7..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingPreviewResponse.java.off +++ /dev/null @@ -1,81 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; -import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.gui.GuiCraftingPreview; -import com.raoulvdberge.refinedstorage.gui.grid.GuiGridCraftingSettings; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -import java.util.LinkedList; -import java.util.List; - -public class MessageGridCraftingPreviewResponse implements IMessage, IMessageHandler { - private List stacks; - private int hash; - private int quantity; - private boolean fluids; - - public MessageGridCraftingPreviewResponse() { - } - - public MessageGridCraftingPreviewResponse(List stacks, int hash, int quantity, boolean fluids) { - this.stacks = stacks; - this.hash = hash; - this.quantity = quantity; - this.fluids = fluids; - } - - @Override - public void fromBytes(ByteBuf buf) { - this.hash = buf.readInt(); - this.quantity = buf.readInt(); - this.fluids = buf.readBoolean(); - - this.stacks = new LinkedList<>(); - - int size = buf.readInt(); - - for (int i = 0; i < size; i++) { - this.stacks.add(API.instance().getCraftingPreviewElementRegistry().get(ByteBufUtils.readUTF8String(buf)).apply(buf)); - } - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(hash); - buf.writeInt(quantity); - buf.writeBoolean(fluids); - - buf.writeInt(stacks.size()); - - for (ICraftingPreviewElement stack : stacks) { - ByteBufUtils.writeUTF8String(buf, stack.getId()); - stack.writeToByteBuf(buf); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IMessage onMessage(MessageGridCraftingPreviewResponse message, MessageContext ctx) { - Minecraft.getMinecraft().addScheduledTask(() -> { - GuiScreen screen = Minecraft.getMinecraft().currentScreen; - - if (screen instanceof GuiGridCraftingSettings) { - screen = ((GuiGridCraftingSettings) screen).getParent(); - } - - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingPreview(screen, message.stacks, message.hash, message.quantity, message.fluids)); - }); - - return null; - } -} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingStart.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingStart.java.off deleted file mode 100644 index f5427998b..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingStart.java.off +++ /dev/null @@ -1,56 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.container.GridContainer; -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.inventory.Container; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; - -public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { - private int hash; - private int quantity; - private boolean fluids; - - public MessageGridCraftingStart() { - } - - public MessageGridCraftingStart(int hash, int quantity, boolean fluids) { - this.hash = hash; - this.quantity = quantity; - this.fluids = fluids; - } - - @Override - public void fromBytes(ByteBuf buf) { - hash = buf.readInt(); - quantity = buf.readInt(); - fluids = buf.readBoolean(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(hash); - buf.writeInt(quantity); - buf.writeBoolean(fluids); - } - - @Override - public void handle(MessageGridCraftingStart message, ServerPlayerEntity player) { - Container container = player.openContainer; - - if (container instanceof ContainerGrid) { - IGrid grid = ((ContainerGrid) container).getGrid(); - - if (message.fluids) { - if (grid.getFluidHandler() != null) { - grid.getFluidHandler().onCraftingRequested(player, message.hash, message.quantity); - } - } else { - if (grid.getItemHandler() != null) { - grid.getItemHandler().onCraftingRequested(player, message.hash, message.quantity); - } - } - } - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingStartResponse.java.off b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingStartResponse.java.off deleted file mode 100644 index 57f54bd2e..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridCraftingStartResponse.java.off +++ /dev/null @@ -1,40 +0,0 @@ -package com.raoulvdberge.refinedstorage.network; - -import com.raoulvdberge.refinedstorage.gui.grid.GuiGridCraftingSettings; -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import net.minecraftforge.fml.relauncher.Side; -import net.minecraftforge.fml.relauncher.SideOnly; - -public class MessageGridCraftingStartResponse implements IMessage, IMessageHandler { - public MessageGridCraftingStartResponse() { - } - - @Override - public void fromBytes(ByteBuf buf) { - // NO OP - } - - @Override - public void toBytes(ByteBuf buf) { - // NO OP - } - - @Override - @SideOnly(Side.CLIENT) - public IMessage onMessage(MessageGridCraftingStartResponse message, MessageContext ctx) { - Minecraft.getMinecraft().addScheduledTask(() -> { - GuiScreen screen = Minecraft.getMinecraft().currentScreen; - - if (screen instanceof GuiGridCraftingSettings) { - ((GuiGridCraftingSettings) screen).close(); - } - }); - - return null; - } -} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java index baf80e487..c57e7f04b 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/NetworkHandler.java @@ -54,6 +54,10 @@ public class NetworkHandler { handler.registerMessage(id++, PortableGridItemDeltaMessage.class, PortableGridItemDeltaMessage::encode, PortableGridItemDeltaMessage::decode, PortableGridItemDeltaMessage::handle); handler.registerMessage(id++, PortableGridFluidUpdateMessage.class, PortableGridFluidUpdateMessage::encode, PortableGridFluidUpdateMessage::decode, PortableGridFluidUpdateMessage::handle); handler.registerMessage(id++, PortableGridFluidDeltaMessage.class, PortableGridFluidDeltaMessage::encode, PortableGridFluidDeltaMessage::decode, PortableGridFluidDeltaMessage::handle); + handler.registerMessage(id++, GridCraftingPreviewRequestMessage.class, GridCraftingPreviewRequestMessage::encode, GridCraftingPreviewRequestMessage::decode, GridCraftingPreviewRequestMessage::handle); + handler.registerMessage(id++, GridCraftingPreviewResponseMessage.class, GridCraftingPreviewResponseMessage::encode, GridCraftingPreviewResponseMessage::decode, GridCraftingPreviewResponseMessage::handle); + handler.registerMessage(id++, GridCraftingStartRequestMessage.class, GridCraftingStartRequestMessage::encode, GridCraftingStartRequestMessage::decode, GridCraftingStartRequestMessage::handle); + handler.registerMessage(id++, GridCraftingStartResponseMessage.class, GridCraftingStartResponseMessage::encode, GridCraftingStartResponseMessage::decode, GridCraftingStartResponseMessage::handle); } public void sendToServer(Object message) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewRequestMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewRequestMessage.java new file mode 100644 index 000000000..782a7e538 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewRequestMessage.java @@ -0,0 +1,67 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.container.GridContainer; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.UUID; +import java.util.function.Supplier; + +public class GridCraftingPreviewRequestMessage { + private UUID id; + private int quantity; + private boolean noPreview; + private boolean fluids; + + public GridCraftingPreviewRequestMessage(UUID id, int quantity, boolean noPreview, boolean fluids) { + this.id = id; + this.quantity = quantity; + this.noPreview = noPreview; + this.fluids = fluids; + } + + public static GridCraftingPreviewRequestMessage decode(PacketBuffer buf) { + return new GridCraftingPreviewRequestMessage( + buf.readUniqueId(), + buf.readInt(), + buf.readBoolean(), + buf.readBoolean() + ); + } + + public static void encode(GridCraftingPreviewRequestMessage message, PacketBuffer buf) { + buf.writeUniqueId(message.id); + buf.writeInt(message.quantity); + buf.writeBoolean(message.noPreview); + buf.writeBoolean(message.fluids); + } + + public static void handle(GridCraftingPreviewRequestMessage message, Supplier ctx) { + ServerPlayerEntity player = ctx.get().getSender(); + + if (player != null) { + ctx.get().enqueueWork(() -> { + Container container = player.openContainer; + + if (container instanceof GridContainer) { + IGrid grid = ((GridContainer) container).getGrid(); + + if (message.fluids) { + if (grid.getFluidHandler() != null) { + grid.getFluidHandler().onCraftingPreviewRequested(player, message.id, message.quantity, message.noPreview); + } + } else { + if (grid.getItemHandler() != null) { + grid.getItemHandler().onCraftingPreviewRequested(player, message.id, message.quantity, message.noPreview); + } + } + } + }); + } + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java new file mode 100644 index 000000000..e7a9ce704 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingPreviewResponseMessage.java @@ -0,0 +1,74 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.screen.grid.CraftingPreviewScreen; +import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; +import java.util.function.Supplier; + +public class GridCraftingPreviewResponseMessage { + private List stacks; + private UUID id; + private int quantity; + private boolean fluids; + + public GridCraftingPreviewResponseMessage(List stacks, UUID id, int quantity, boolean fluids) { + this.stacks = stacks; + this.id = id; + this.quantity = quantity; + this.fluids = fluids; + } + + public static GridCraftingPreviewResponseMessage decode(PacketBuffer buf) { + UUID id = buf.readUniqueId(); + int quantity = buf.readInt(); + boolean fluids = buf.readBoolean(); + + List stacks = new LinkedList<>(); + + int size = buf.readInt(); + + for (int i = 0; i < size; i++) { + ResourceLocation type = buf.readResourceLocation(); + stacks.add(API.instance().getCraftingPreviewElementRegistry().get(type).apply(buf)); + } + + return new GridCraftingPreviewResponseMessage(stacks, id, quantity, fluids); + } + + public static void encode(GridCraftingPreviewResponseMessage message, PacketBuffer buf) { + buf.writeUniqueId(message.id); + buf.writeInt(message.quantity); + buf.writeBoolean(message.fluids); + buf.writeInt(message.stacks.size()); + + for (ICraftingPreviewElement stack : message.stacks) { + buf.writeResourceLocation(stack.getId()); + stack.write(buf); + } + } + + public static void handle(GridCraftingPreviewResponseMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + Screen screen = Minecraft.getInstance().currentScreen; + + if (screen instanceof CraftingSettingsScreen) { + screen = ((CraftingSettingsScreen) screen).getParent(); + } + + Minecraft.getInstance().displayGuiScreen(new CraftingPreviewScreen(screen, message.stacks, message.id, message.quantity, message.fluids, new TranslationTextComponent("gui.refinedstorage.crafting_preview"))); + }); + + ctx.get().setPacketHandled(true); + } +} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartRequestMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartRequestMessage.java new file mode 100644 index 000000000..dc4625352 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartRequestMessage.java @@ -0,0 +1,63 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.container.GridContainer; +import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.inventory.container.Container; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.UUID; +import java.util.function.Supplier; + +public class GridCraftingStartRequestMessage { + private UUID id; + private int quantity; + private boolean fluids; + + public GridCraftingStartRequestMessage(UUID id, int quantity, boolean fluids) { + this.id = id; + this.quantity = quantity; + this.fluids = fluids; + } + + public static GridCraftingStartRequestMessage decode(PacketBuffer buf) { + return new GridCraftingStartRequestMessage( + buf.readUniqueId(), + buf.readInt(), + buf.readBoolean() + ); + } + + public static void encode(GridCraftingStartRequestMessage message, PacketBuffer buf) { + buf.writeUniqueId(message.id); + buf.writeInt(message.quantity); + buf.writeBoolean(message.fluids); + } + + public static void handle(GridCraftingStartRequestMessage message, Supplier ctx) { + ServerPlayerEntity player = ctx.get().getSender(); + + if (player != null) { + ctx.get().enqueueWork(() -> { + Container container = player.openContainer; + + if (container instanceof GridContainer) { + IGrid grid = ((GridContainer) container).getGrid(); + + if (message.fluids) { + if (grid.getFluidHandler() != null) { + grid.getFluidHandler().onCraftingRequested(player, message.id, message.quantity); + } + } else { + if (grid.getItemHandler() != null) { + grid.getItemHandler().onCraftingRequested(player, message.id, message.quantity); + } + } + } + }); + } + + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java new file mode 100644 index 000000000..36b242d19 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridCraftingStartResponseMessage.java @@ -0,0 +1,30 @@ +package com.raoulvdberge.refinedstorage.network.grid; + +import com.raoulvdberge.refinedstorage.screen.grid.CraftingSettingsScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.network.NetworkEvent; + +import java.util.function.Supplier; + +public class GridCraftingStartResponseMessage { + public static GridCraftingStartResponseMessage decode(PacketBuffer buf) { + return new GridCraftingStartResponseMessage(); + } + + public static void encode(GridCraftingStartResponseMessage message, PacketBuffer buf) { + } + + public static void handle(GridCraftingStartResponseMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + Screen screen = Minecraft.getInstance().currentScreen; + + if (screen instanceof CraftingSettingsScreen) { + ((CraftingSettingsScreen) screen).close(); + } + }); + + ctx.get().setPacketHandled(true); + } +} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java index d977ff798..4b2fde86e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidDeltaMessage.java @@ -52,7 +52,7 @@ public class GridFluidDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), message.network, false, message.network.getFluidStorageTracker().get(delta.getStack())); + StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), false, message.network, message.network.getFluidStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java index f8d5a992c..35d6faa94 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridFluidUpdateMessage.java @@ -1,6 +1,5 @@ package com.raoulvdberge.refinedstorage.network.grid; -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.screen.BaseScreen; @@ -49,22 +48,16 @@ public class GridFluidUpdateMessage { public static void encode(GridFluidUpdateMessage message, PacketBuffer buf) { buf.writeBoolean(message.canCraft); - int size = message.network.getFluidStorageCache().getList().getStacks().size(); - - for (ICraftingPattern pattern : message.network.getCraftingManager().getPatterns()) { - size += pattern.getFluidOutputs().size(); - } + int size = message.network.getFluidStorageCache().getList().getStacks().size() + message.network.getFluidStorageCache().getCraftablesList().getStacks().size(); buf.writeInt(size); for (StackListEntry stack : message.network.getFluidStorageCache().getList().getStacks()) { - StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), message.network, false, message.network.getFluidStorageTracker().get(stack.getStack())); + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), false, message.network, message.network.getFluidStorageTracker().get(stack.getStack())); } - for (ICraftingPattern pattern : message.network.getCraftingManager().getPatterns()) { - for (FluidStack output : pattern.getFluidOutputs()) { - // TODO - } + for (StackListEntry stack : message.network.getFluidStorageCache().getCraftablesList().getStacks()) { + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getFluidStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java index 4f7a6075b..fb0185bba 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemDeltaMessage.java @@ -52,7 +52,7 @@ public class GridItemDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), message.network, false, message.network.getItemStorageTracker().get(delta.getStack())); + StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), false, message.network, message.network.getItemStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java index 91d19415f..f8a6d0abb 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/GridItemUpdateMessage.java @@ -1,6 +1,5 @@ package com.raoulvdberge.refinedstorage.network.grid; -import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.util.StackListEntry; import com.raoulvdberge.refinedstorage.screen.BaseScreen; @@ -49,22 +48,16 @@ public class GridItemUpdateMessage { public static void encode(GridItemUpdateMessage message, PacketBuffer buf) { buf.writeBoolean(message.canCraft); - int size = message.network.getItemStorageCache().getList().getStacks().size(); - - for (ICraftingPattern pattern : message.network.getCraftingManager().getPatterns()) { - size += pattern.getOutputs().size(); - } + int size = message.network.getItemStorageCache().getList().getStacks().size() + message.network.getItemStorageCache().getCraftablesList().getStacks().size(); buf.writeInt(size); for (StackListEntry stack : message.network.getItemStorageCache().getList().getStacks()) { - StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), message.network, false, message.network.getItemStorageTracker().get(stack.getStack())); + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), false, message.network, message.network.getItemStorageTracker().get(stack.getStack())); } - for (ICraftingPattern pattern : message.network.getCraftingManager().getPatterns()) { - for (ItemStack output : pattern.getOutputs()) { - // TODO StackUtils.writeItemGridStack(buf, output, message.network, true, message.network.getItemStorageTracker().get(output)); - } + for (StackListEntry stack : message.network.getItemStorageCache().getCraftablesList().getStacks()) { + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getItemStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java index 4fa83b3d5..22ab9a7ec 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidDeltaMessage.java @@ -50,7 +50,7 @@ public class PortableGridFluidDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), null, false, message.portableGrid.getFluidStorageTracker().get(delta.getStack())); + StackUtils.writeFluidGridStack(buf, delta.getStack(), delta.getId(), false, null, message.portableGrid.getFluidStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java index 34d0d5313..a18dea7ca 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridFluidUpdateMessage.java @@ -46,7 +46,7 @@ public class PortableGridFluidUpdateMessage { buf.writeInt(size); for (StackListEntry stack : message.portableGrid.getFluidCache().getList().getStacks()) { - StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), null, false, message.portableGrid.getFluidStorageTracker().get(stack.getStack())); + StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), false, null, message.portableGrid.getFluidStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java index 4973f32fc..129513086 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemDeltaMessage.java @@ -52,7 +52,7 @@ public class PortableGridItemDeltaMessage { for (StackListResult delta : message.deltas) { buf.writeInt(delta.getChange()); - StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), null, false, message.portableGrid.getItemStorageTracker().get(delta.getStack())); + StackUtils.writeItemGridStack(buf, delta.getStack(), delta.getId(), false, null, message.portableGrid.getItemStorageTracker().get(delta.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java index e5aacecda..be3d50e32 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/grid/PortableGridItemUpdateMessage.java @@ -46,7 +46,7 @@ public class PortableGridItemUpdateMessage { buf.writeInt(size); for (StackListEntry stack : message.portableGrid.getItemCache().getList().getStacks()) { - StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), null, false, message.portableGrid.getItemStorageTracker().get(stack.getStack())); + StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), false, null, message.portableGrid.getItemStorageTracker().get(stack.getStack())); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 28f4293c9..50bac196f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -7,8 +7,6 @@ public class ProxyCommon { API.deliver(e.getAsmData()); - API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory()); - API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(StackUtils.readItemStack(buf), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt())); API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementFluidRender.ID, buf -> new CraftingMonitorElementFluidRender(StackUtils.readFluidStack(buf), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt())); API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementError.ID, buf -> { @@ -18,10 +16,6 @@ public class ProxyCommon { return new CraftingMonitorElementError(API.instance().getCraftingMonitorElementRegistry().get(id).apply(buf), message); }); - API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementItemStack.ID, CraftingPreviewElementItemStack::fromByteBuf); - API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementFluidStack.ID, CraftingPreviewElementFluidStack::fromByteBuf); - API.instance().getCraftingPreviewElementRegistry().add(CraftingPreviewElementError.ID, CraftingPreviewElementError::fromByteBuf); - IntegrationInventorySorter.register(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterTileDataParameterClientListener.java similarity index 89% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterTileDataParameterClientListener.java index 63a47171e..f98a6c908 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/TileDataParameterClientListenerCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/CrafterTileDataParameterClientListener.java @@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.screen; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.CrafterModeSideButton; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameterClientListener; -public class TileDataParameterClientListenerCrafter implements TileDataParameterClientListener { +public class CrafterTileDataParameterClientListener implements TileDataParameterClientListener { @Override public void onChanged(boolean initial, Boolean hasRoot) { if (!hasRoot) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiHandler.java deleted file mode 100644 index 49e46e75e..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiHandler.java +++ /dev/null @@ -1,132 +0,0 @@ -package com.raoulvdberge.refinedstorage.screen; - -public class GuiHandler { - /*private Object getContainer(int ID, PlayerEntity player, TileEntity tile) { - switch (ID) { - case RSGui.IMPORTER: - return new ContainerImporter((TileImporter) tile, player); - case RSGui.EXPORTER: - return new ContainerExporter((TileExporter) tile, player); - case RSGui.DETECTOR: - return new ContainerDetector((TileDetector) tile, player); - case RSGui.DESTRUCTOR: - return new ContainerDestructor((TileDestructor) tile, player); - case RSGui.CONSTRUCTOR: - return new ContainerConstructor((TileConstructor) tile, player); - case RSGui.STORAGE: - return new ContainerStorage((TileStorage) tile, player); - case RSGui.EXTERNAL_STORAGE: - return new ContainerExternalStorage((TileExternalStorage) tile, player); - case RSGui.RELAY: - return new ContainerRelay((TileRelay) tile, player); - case RSGui.INTERFACE: - return new ContainerInterface((TileInterface) tile, player); - case RSGui.CRAFTING_MONITOR: - return new ContainerCraftingMonitor(((TileCraftingMonitor) tile).getNode(), (TileCraftingMonitor) tile, player); - case RSGui.WIRELESS_TRANSMITTER: - return new ContainerWirelessTransmitter((TileWirelessTransmitter) tile, player); - case RSGui.CRAFTER: - return new ContainerCrafter((TileCrafter) tile, player); - case RSGui.NETWORK_TRANSMITTER: - return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); - case RSGui.FLUID_INTERFACE: - return new ContainerFluidInterface((TileFluidInterface) tile, player); - case RSGui.FLUID_STORAGE: - return new ContainerFluidStorage((TileFluidStorage) tile, player); - case RSGui.DISK_MANIPULATOR: - return new ContainerDiskManipulator((TileDiskManipulator) tile, player); - case RSGui.READER_WRITER: - return new ContainerReaderWriter((IGuiReaderWriter) ((TileNode) tile).getNode(), (TileBase) tile, player); - case RSGui.SECURITY_MANAGER: - return new ContainerSecurityManager((TileSecurityManager) tile, player); - case RSGui.STORAGE_MONITOR: - return new ContainerStorageMonitor((TileStorageMonitor) tile, player); - case RSGui.CRAFTER_MANAGER: - return new ContainerCrafterManager((TileCrafterManager) tile, player, new ResizableDisplayDummy()); - default: - return null; - } - } - - @Override - public Object getServerGuiElement(int ID, PlayerEntity player, World world, int x, int y, int z) { - if (ID == RSGui.WIRELESS_CRAFTING_MONITOR) { - return getCraftingMonitorContainer(player, x); - } - - return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); - } - - @Override - public Object getClientGuiElement(int ID, PlayerEntity player, World world, int x, int y, int z) { - TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); - - switch (ID) { - case RSGui.IMPORTER: - return new GuiImporter((ContainerImporter) getContainer(ID, player, tile), player.inventory); - case RSGui.EXPORTER: - return new GuiExporter((ContainerExporter) getContainer(ID, player, tile), player.inventory); - case RSGui.DETECTOR: - return new GuiDetector((ContainerDetector) getContainer(ID, player, tile), player.inventory); - case RSGui.DESTRUCTOR: - return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile), player.inventory); - case RSGui.CONSTRUCTOR: - return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), player.inventory); - case RSGui.STORAGE: - return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), ((TileStorage) tile).getNode(), player.inventory); - case RSGui.EXTERNAL_STORAGE: - return new GuiStorage((ContainerExternalStorage) getContainer(ID, player, tile), ((TileExternalStorage) tile).getNode(), player.inventory); - case RSGui.RELAY: - return new GuiRelay((ContainerRelay) getContainer(ID, player, tile), player.inventory); - case RSGui.INTERFACE: - return new GuiInterface((ContainerInterface) getContainer(ID, player, tile), player.inventory); - case RSGui.CRAFTING_MONITOR: { - NetworkNodeCraftingMonitor node = ((TileCraftingMonitor) tile).getNode(); - - return new GuiCraftingMonitor(new ContainerCraftingMonitor(node, (TileCraftingMonitor) tile, player), node, player.inventory); - } - case RSGui.WIRELESS_TRANSMITTER: - return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), player.inventory); - case RSGui.CRAFTER: - return new GuiCrafter((ContainerCrafter) getContainer(ID, player, tile), player.inventory); - case RSGui.NETWORK_TRANSMITTER: - return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile, player.inventory); - case RSGui.FLUID_INTERFACE: - return new GuiFluidInterface((ContainerFluidInterface) getContainer(ID, player, tile), player.inventory); - case RSGui.FLUID_STORAGE: - return new GuiStorage((ContainerFluidStorage) getContainer(ID, player, tile), ((TileFluidStorage) tile).getNode(), player.inventory); - case RSGui.DISK_MANIPULATOR: - return new GuiDiskManipulator((ContainerDiskManipulator) getContainer(ID, player, tile), player.inventory); - case RSGui.WIRELESS_CRAFTING_MONITOR: - return getWirelessCraftingMonitorGui(player, x); - case RSGui.READER_WRITER: - return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IGuiReaderWriter) ((TileNode) tile).getNode(), player.inventory); - case RSGui.SECURITY_MANAGER: - return new GuiSecurityManager((ContainerSecurityManager) getContainer(ID, player, tile), (TileSecurityManager) tile, player.inventory); - case RSGui.STORAGE_MONITOR: - return new GuiStorageMonitor((ContainerStorageMonitor) getContainer(ID, player, tile), player.inventory); - case RSGui.CRAFTER_MANAGER: - GuiCrafterManager crafterManagerGui = new GuiCrafterManager(((TileCrafterManager) tile).getNode(), player.inventory); - - crafterManagerGui.setContainer(new ContainerCrafterManager((TileCrafterManager) tile, player, crafterManagerGui)); - - return crafterManagerGui; - default: - return null; - } - } - - private WirelessCraftingMonitor getWirelessCraftingMonitor(PlayerEntity player, int invIndex) { - return new WirelessCraftingMonitor(player.inventory.getStackInSlot(invIndex)); - } - - private GuiCraftingMonitor getWirelessCraftingMonitorGui(PlayerEntity player, int invIndex) { - WirelessCraftingMonitor craftingMonitor = getWirelessCraftingMonitor(player, invIndex); - - return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, null, player), craftingMonitor, player.inventory); - } - - private ContainerCraftingMonitor getCraftingMonitorContainer(PlayerEntity player, int invIndex) { - return new ContainerCraftingMonitor(getWirelessCraftingMonitor(player, invIndex), null, player); - }*/ -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCraftingPreview.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/CraftingPreviewScreen.java similarity index 62% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCraftingPreview.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/grid/CraftingPreviewScreen.java index 746a1dda3..ebf0853e1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/GuiCraftingPreview.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/CraftingPreviewScreen.java @@ -1,4 +1,4 @@ -package com.raoulvdberge.refinedstorage.screen; +package com.raoulvdberge.refinedstorage.screen.grid; import com.mojang.blaze3d.platform.GlStateManager; import com.raoulvdberge.refinedstorage.RS; @@ -6,10 +6,13 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.preview.ICraftingPreviewElement; import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskErrorType; import com.raoulvdberge.refinedstorage.api.render.IElementDrawers; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementError; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementFluidStack; -import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ErrorCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.FluidCraftingPreviewElement; +import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.ItemCraftingPreviewElement; import com.raoulvdberge.refinedstorage.apiimpl.render.CraftingPreviewElementDrawers; +import com.raoulvdberge.refinedstorage.item.PatternItem; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingStartRequestMessage; +import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.widget.ScrollbarWidget; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.Minecraft; @@ -21,45 +24,45 @@ import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.Container; import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fluids.FluidStack; +import org.lwjgl.glfw.GLFW; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; -public class GuiCraftingPreview extends BaseScreen { +public class CraftingPreviewScreen extends BaseScreen { private static final int VISIBLE_ROWS = 5; - private List stacks; - private Screen parent; + private final List stacks; + private final Screen parent; - private ScrollbarWidget scrollbar; + private final ScrollbarWidget scrollbar; - private int hash; - private int quantity; - - private Button startButton; - private Button cancelButton; + private final UUID id; + private final int quantity; + private final boolean fluids; private ItemStack hoveringStack; private FluidStack hoveringFluid; private IElementDrawers drawers = new CraftingPreviewElementDrawers(this, font); - private boolean fluids; - - public GuiCraftingPreview(Screen parent, List stacks, int hash, int quantity, boolean fluids) { + public CraftingPreviewScreen(Screen parent, List stacks, UUID id, int quantity, boolean fluids, ITextComponent title) { super(new Container(null, 0) { @Override - public boolean canInteractWith(PlayerEntity playerIn) { + public boolean canInteractWith(PlayerEntity player) { return false; } - }, 254, 201, null, null); + }, 254, 201, null, title); this.stacks = new ArrayList<>(stacks); this.parent = parent; - this.hash = hash; + this.id = id; this.quantity = quantity; this.fluids = fluids; @@ -68,27 +71,22 @@ public class GuiCraftingPreview extends BaseScreen { @Override public void onPostInit(int x, int y) { - cancelButton = addButton(x + 55, y + 201 - 20 - 7, 50, 20, I18n.format("gui.cancel"), true, true, btn -> { - }); - - startButton = addButton(x + 129, y + 201 - 20 - 7, 50, 20, I18n.format("misc.refinedstorage:start"), true, true, btn -> { - }); + addButton(x + 55, y + 201 - 20 - 7, 50, 20, I18n.format("gui.cancel"), true, true, btn -> close()); + Button startButton = addButton(x + 129, y + 201 - 20 - 7, 50, 20, I18n.format("misc.refinedstorage.start"), true, true, btn -> startRequest()); startButton.active = stacks.stream().noneMatch(ICraftingPreviewElement::hasMissing) && getErrorType() == null; } @Override public void tick(int x, int y) { - if (scrollbar != null) { - scrollbar.setEnabled(getRows() > VISIBLE_ROWS); - scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS); - } + scrollbar.setEnabled(getRows() > VISIBLE_ROWS); + scrollbar.setMaxOffset(getRows() - VISIBLE_ROWS); } @Nullable private CraftingTaskErrorType getErrorType() { - if (stacks.size() == 1 && stacks.get(0) instanceof CraftingPreviewElementError) { - return ((CraftingPreviewElementError) stacks.get(0)).getType(); + if (stacks.size() == 1 && stacks.get(0) instanceof ErrorCraftingPreviewElement) { + return ((ErrorCraftingPreviewElement) stacks.get(0)).getType(); } return null; @@ -103,11 +101,13 @@ public class GuiCraftingPreview extends BaseScreen { if (getErrorType() != null) { fill(x + 7, y + 20, x + 228, y + 169, 0xFFDBDBDB); } + + scrollbar.render(); } @Override public void renderForeground(int mouseX, int mouseY) { - renderString(7, 7, I18n.format("gui.refinedstorage:crafting_preview")); + renderString(7, 7, title.getFormattedText()); int x = 7; int y = 15; @@ -118,27 +118,27 @@ public class GuiCraftingPreview extends BaseScreen { GlStateManager.pushMatrix(); GlStateManager.scalef(scale, scale, 1); - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 11, scale), I18n.format("gui.refinedstorage:crafting_preview.error")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 11, scale), I18n.format("gui.refinedstorage.crafting_preview.error")); switch (getErrorType()) { case RECURSIVE: { - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 21, scale), I18n.format("gui.refinedstorage:crafting_preview.error.recursive.0")); - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 31, scale), I18n.format("gui.refinedstorage:crafting_preview.error.recursive.1")); - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 41, scale), I18n.format("gui.refinedstorage:crafting_preview.error.recursive.2")); - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 51, scale), I18n.format("gui.refinedstorage:crafting_preview.error.recursive.3")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 21, scale), I18n.format("gui.refinedstorage.crafting_preview.error.recursive.0")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 31, scale), I18n.format("gui.refinedstorage.crafting_preview.error.recursive.1")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 41, scale), I18n.format("gui.refinedstorage.crafting_preview.error.recursive.2")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 51, scale), I18n.format("gui.refinedstorage.crafting_preview.error.recursive.3")); - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 61, scale), I18n.format("gui.refinedstorage:crafting_preview.error.recursive.4")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 61, scale), I18n.format("gui.refinedstorage.crafting_preview.error.recursive.4")); GlStateManager.popMatrix(); - ICraftingPattern pattern = /* TODO ItemPattern.getPatternFromCache(parent.getMinecraft().world, (ItemStack) stacks.get(0).getElement())*/null; + ICraftingPattern pattern = PatternItem.fromCache(parent.getMinecraft().world, (ItemStack) stacks.get(0).getElement()); int yy = 83; for (ItemStack output : pattern.getOutputs()) { if (output != null) { GlStateManager.pushMatrix(); GlStateManager.scalef(scale, scale, 1); - renderString(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy + 6, scale), output.getDisplayName().getFormattedText()); // TODO getFOrmattedText + renderString(RenderUtils.getOffsetOnScale(x + 25, scale), RenderUtils.getOffsetOnScale(yy + 6, scale), output.getDisplayName().getFormattedText()); GlStateManager.popMatrix(); RenderHelper.enableGUIStandardItemLighting(); @@ -153,8 +153,8 @@ public class GuiCraftingPreview extends BaseScreen { break; } case TOO_COMPLEX: { - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 21, scale), I18n.format("gui.refinedstorage:crafting_preview.error.too_complex.0")); - renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 31, scale), I18n.format("gui.refinedstorage:crafting_preview.error.too_complex.1")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 21, scale), I18n.format("gui.refinedstorage.crafting_preview.error.too_complex.0")); + renderString(RenderUtils.getOffsetOnScale(x + 5, scale), RenderUtils.getOffsetOnScale(y + 31, scale), I18n.format("gui.refinedstorage.crafting_preview.error.too_complex.1")); GlStateManager.popMatrix(); @@ -177,10 +177,10 @@ public class GuiCraftingPreview extends BaseScreen { stack.draw(x, y + 5, drawers); if (RenderUtils.inBounds(x + 5, y + 7, 16, 16, mouseX, mouseY)) { - this.hoveringStack = stack.getId().equals(CraftingPreviewElementItemStack.ID) ? (ItemStack) stack.getElement() : null; + this.hoveringStack = stack.getId().equals(ItemCraftingPreviewElement.ID) ? (ItemStack) stack.getElement() : null; if (this.hoveringStack == null) { - this.hoveringFluid = stack.getId().equals(CraftingPreviewElementFluidStack.ID) ? (FluidStack) stack.getElement() : null; + this.hoveringFluid = stack.getId().equals(FluidCraftingPreviewElement.ID) ? (FluidStack) stack.getElement() : null; } } } @@ -202,37 +202,61 @@ public class GuiCraftingPreview extends BaseScreen { super.render(mouseX, mouseY, partialTicks); if (hoveringStack != null) { - renderTooltip(hoveringStack, mouseX, mouseY, hoveringStack.getTooltip(Minecraft.getInstance().player, Minecraft.getInstance().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL)); + renderTooltip( + hoveringStack, + mouseX, + mouseY, + hoveringStack.getTooltip( + Minecraft.getInstance().player, + Minecraft.getInstance().gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL + ).stream().map(ITextComponent::getFormattedText).collect(Collectors.toList()) + ); } else if (hoveringFluid != null) { - renderTooltip(mouseX, mouseY, hoveringFluid.getDisplayName().getFormattedText()); // TODO gft - } - } - - /* TODO - @Override - protected void keyTyped(char character, int keyCode) throws IOException { - if (keyCode == Keyboard.KEY_RETURN && startButton.enabled) { - startRequest(); - } else if (keyCode == Keyboard.KEY_ESCAPE) { - close(); - } else { - super.keyTyped(character, keyCode); + renderTooltip(mouseX, mouseY, hoveringFluid.getDisplayName().getFormattedText()); } } @Override - protected void actionPerformed(GuiButton button) throws IOException { - super.actionPerformed(button); + public void mouseMoved(double mx, double my) { + scrollbar.mouseMoved(mx, my); - if (button.id == startButton.id) { + super.mouseMoved(mx, my); + } + + @Override + public boolean mouseClicked(double mx, double my, int button) { + return scrollbar.mouseClicked(mx, my, button) || super.mouseClicked(mx, my, button); + } + + @Override + public boolean mouseReleased(double mx, double my, int button) { + return scrollbar.mouseReleased(mx, my, button) || super.mouseReleased(mx, my, button); + } + + @Override + public boolean mouseScrolled(double x, double y, double delta) { + return this.scrollbar.mouseScrolled(x, y, delta) || super.mouseScrolled(x, y, delta); + } + + @Override + public boolean keyPressed(int key, int scanCode, int modifiers) { + if (key == GLFW.GLFW_KEY_ENTER || key == GLFW.GLFW_KEY_KP_ENTER) { startRequest(); - } else if (button.id == cancelButton.id) { - close(); + + return true; } - }*/ + + if (key == GLFW.GLFW_KEY_ESCAPE) { + close(); + + return true; + } + + return super.keyPressed(key, scanCode, modifiers); + } private void startRequest() { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridCraftingStart(hash, quantity, fluids)); + RS.NETWORK_HANDLER.sendToServer(new GridCraftingStartRequestMessage(id, quantity, fluids)); close(); } @@ -242,6 +266,6 @@ public class GuiCraftingPreview extends BaseScreen { } private void close() { - // TODO FMLClientHandler.instance().showGuiScreen(parent); + minecraft.displayGuiScreen(parent); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GuiGridCraftingSettings.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/CraftingSettingsScreen.java similarity index 72% rename from src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GuiGridCraftingSettings.java rename to src/main/java/com/raoulvdberge/refinedstorage/screen/grid/CraftingSettingsScreen.java index 18249f9c5..3e479446f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GuiGridCraftingSettings.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/CraftingSettingsScreen.java @@ -1,7 +1,8 @@ package com.raoulvdberge.refinedstorage.screen.grid; -import com.google.common.primitives.Ints; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.container.CraftingSettingsContainer; +import com.raoulvdberge.refinedstorage.network.grid.GridCraftingPreviewRequestMessage; import com.raoulvdberge.refinedstorage.screen.AmountSpecifyingScreen; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.screen.grid.stack.FluidGridStack; @@ -11,10 +12,10 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.util.text.TranslationTextComponent; import net.minecraftforge.fluids.FluidAttributes; -public class GuiGridCraftingSettings extends AmountSpecifyingScreen { +public class CraftingSettingsScreen extends AmountSpecifyingScreen { private IGridStack stack; - public GuiGridCraftingSettings(BaseScreen parent, PlayerEntity player, IGridStack stack) { + public CraftingSettingsScreen(BaseScreen parent, PlayerEntity player, IGridStack stack) { super(parent, new CraftingSettingsContainer(player, stack), 172, 99, player.inventory, new TranslationTextComponent("container.crafting")); this.stack = stack; @@ -22,7 +23,7 @@ public class GuiGridCraftingSettings extends AmountSpecifyingScreen 0) { - // TODO RS.INSTANCE.network.sendToServer(new MessageGridCraftingPreview(stack.getHash(), quantity, shiftDown, stack instanceof GridStackFluid)); + RS.NETWORK_HANDLER.sendToServer(new GridCraftingPreviewRequestMessage(stack.getId(), quantity, shiftDown, stack instanceof FluidGridStack)); okButton.active = false; + } catch (NumberFormatException e) { + // NO OP } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java index 6209a9dd1..f20552502 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/GridScreen.java @@ -405,7 +405,7 @@ public class GridScreen extends BaseScreen implements IScreenInfo List textLines = Lists.newArrayList(gridStack.getTooltip().split("\n")); List smallTextLines = Lists.newArrayList(); - if (!gridStack.doesDisplayCraftText()) { + if (!gridStack.isCraftable()) { smallTextLines.add(I18n.format("misc.refinedstorage.total", gridStack.getFormattedFullQuantity())); } @@ -465,8 +465,8 @@ public class GridScreen extends BaseScreen implements IScreenInfo IGridStack stack = view.getStacks().get(slotNumber); if (isPulling) { - if (stack.isCraftable() && view.canCraft() && (stack.doesDisplayCraftText() || (hasShiftDown() && hasControlDown()))) { - // @TODO FMLCommonHandler.instance().showGuiScreen(new GuiGridCraftingSettings(this, ((ContainerGrid) this.inventorySlots).getPlayer(), stack)); + if (stack.isCraftable() && view.canCraft()) { + minecraft.displayGuiScreen(new CraftingSettingsScreen(this, playerInventory.player, stack)); } else if (grid.getGridType() == GridType.FLUID && held.isEmpty()) { RS.NETWORK_HANDLER.sendToServer(new GridFluidPullMessage(view.getStacks().get(slotNumber).getId(), hasShiftDown())); } else if (grid.getGridType() != GridType.FLUID) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java index c0cec4a5e..631b79e3f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -17,16 +17,14 @@ public class FluidGridStack implements IGridStack { @Nullable private StorageTrackerEntry entry; private boolean craftable; - private boolean displayCraftText; private String modId; private String modName; - public FluidGridStack(UUID id, FluidStack stack, @Nullable StorageTrackerEntry entry, boolean craftable, boolean displayCraftText) { + public FluidGridStack(UUID id, FluidStack stack, @Nullable StorageTrackerEntry entry, boolean craftable) { this.id = id; this.stack = stack; this.entry = entry; this.craftable = craftable; - this.displayCraftText = displayCraftText; } public FluidStack getStack() { @@ -38,16 +36,6 @@ public class FluidGridStack implements IGridStack { return craftable; } - @Override - public boolean doesDisplayCraftText() { - return displayCraftText; - } - - @Override - public void setDisplayCraftText(boolean displayCraftText) { - this.displayCraftText = displayCraftText; - } - @Override public UUID getId() { return id; @@ -99,7 +87,8 @@ public class FluidGridStack implements IGridStack { @Override public int getQuantity() { - return stack.getAmount(); + // The isCraftable check is needed so sorting is applied correctly + return isCraftable() ? 0 : stack.getAmount(); } @Override @@ -113,7 +102,7 @@ public class FluidGridStack implements IGridStack { String text; - if (displayCraftText) { + if (isCraftable()) { text = I18n.format("gui.refinedstorage.grid.craft"); } else { text = API.instance().getQuantityFormatter().formatInBucketFormWithOnlyTrailingDigitsIfZero(getQuantity()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java index 5861448e7..fa8d67f6e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/IGridStack.java @@ -33,8 +33,4 @@ public interface IGridStack { void setTrackerEntry(@Nullable StorageTrackerEntry entry); boolean isCraftable(); - - boolean doesDisplayCraftText(); - - void setDisplayCraftText(boolean displayCraftText); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java index 3571c2064..bf05c6aec 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -19,7 +19,6 @@ public class ItemGridStack implements IGridStack { private ItemStack stack; private String cachedName; private boolean craftable; - private boolean displayCraftText; private String[] oreIds = null; @Nullable private StorageTrackerEntry entry; @@ -31,11 +30,10 @@ public class ItemGridStack implements IGridStack { this.stack = stack; } - public ItemGridStack(UUID id, ItemStack stack, boolean craftable, boolean displayCraftText, StorageTrackerEntry entry) { + public ItemGridStack(UUID id, ItemStack stack, boolean craftable, StorageTrackerEntry entry) { this.id = id; this.stack = stack; this.craftable = craftable; - this.displayCraftText = displayCraftText; this.entry = entry; } @@ -55,20 +53,6 @@ public class ItemGridStack implements IGridStack { return craftable; } - @Override - public boolean doesDisplayCraftText() { - return displayCraftText; - } - - @Override - public void setDisplayCraftText(boolean displayCraftText) { - this.displayCraftText = displayCraftText; - - if (displayCraftText) { - this.stack.setCount(1); - } - } - @Override public UUID getId() { return id; @@ -142,7 +126,8 @@ public class ItemGridStack implements IGridStack { @Override public int getQuantity() { - return doesDisplayCraftText() ? 0 : stack.getCount(); + // The isCraftable check is needed so sorting is applied correctly + return isCraftable() ? 0 : stack.getCount(); } @Override @@ -154,7 +139,7 @@ public class ItemGridStack implements IGridStack { public void draw(BaseScreen gui, int x, int y) { String text = null; - if (displayCraftText) { + if (craftable) { text = I18n.format("gui.refinedstorage.grid.craft"); } else if (stack.getCount() > 1) { text = API.instance().getQuantityFormatter().formatWithUnits(getQuantity()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java index dca7726fe..24c59e957 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/FluidGridView.java @@ -17,11 +17,6 @@ public class FluidGridView extends BaseGridView { map.clear(); for (IGridStack stack : stacks) { - // Don't let a craftable stack override a normal stack - if (stack.doesDisplayCraftText() && map.containsKey(stack.getId())) { - continue; - } - map.put(stack.getId(), stack); } } @@ -40,19 +35,11 @@ public class FluidGridView extends BaseGridView { map.put(stack.getId(), stack); } else { if (existing.getStack().getAmount() + delta <= 0) { - if (existing.isCraftable()) { - existing.setDisplayCraftText(true); - } else { - map.remove(existing.getId()); - } - } else { - if (existing.doesDisplayCraftText()) { - existing.setDisplayCraftText(false); + existing.getStack().grow(delta); - existing.getStack().setAmount(delta); - } else { - existing.getStack().grow(delta); - } + map.remove(existing.getId()); + } else { + existing.getStack().grow(delta); } existing.setTrackerEntry(stack.getTrackerEntry()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java index ab4fea9d5..441e6ad28 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/view/ItemGridView.java @@ -17,11 +17,6 @@ public class ItemGridView extends BaseGridView { map.clear(); for (IGridStack stack : stacks) { - // Don't let a craftable stack override a normal stack - if (stack.doesDisplayCraftText() && map.containsKey(stack.getId())) { - continue; - } - map.put(stack.getId(), stack); } } @@ -40,19 +35,11 @@ public class ItemGridView extends BaseGridView { map.put(stack.getId(), stack); } else { if (existing.getStack().getCount() + delta <= 0) { - if (existing.isCraftable()) { - existing.setDisplayCraftText(true); - } else { - map.remove(existing.getId()); - } - } else { - if (existing.doesDisplayCraftText()) { - existing.setDisplayCraftText(false); + existing.getStack().grow(delta); - existing.getStack().setCount(delta); - } else { - existing.getStack().grow(delta); - } + map.remove(existing.getId()); + } else { + existing.getStack().grow(delta); } existing.setTrackerEntry(stack.getTrackerEntry()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java index 9a53a9915..6999a2622 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/CrafterTile.java @@ -2,7 +2,7 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.RSTiles; import com.raoulvdberge.refinedstorage.apiimpl.network.node.CrafterNetworkNode; -import com.raoulvdberge.refinedstorage.screen.TileDataParameterClientListenerCrafter; +import com.raoulvdberge.refinedstorage.screen.CrafterTileDataParameterClientListener; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.Direction; @@ -18,7 +18,7 @@ import javax.annotation.Nullable; public class CrafterTile extends NetworkNodeTile { public static final TileDataParameter MODE = new TileDataParameter<>(DataSerializers.VARINT, CrafterNetworkNode.CrafterMode.IGNORE.ordinal(), t -> t.getNode().getMode().ordinal(), (t, v) -> t.getNode().setMode(CrafterNetworkNode.CrafterMode.getById(v))); - private static final TileDataParameter HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new TileDataParameterClientListenerCrafter().onChanged(t, v)); + private static final TileDataParameter HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new CrafterTileDataParameterClientListener().onChanged(t, v)); private LazyOptional patternsCapability = LazyOptional.of(() -> getNode().getPatternItems()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java index ec24c6193..1409f28ec 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/StackUtils.java @@ -76,19 +76,12 @@ public final class StackUtils { } } - public static void writeItemGridStack(PacketBuffer buf, ItemStack stack, UUID id, @Nullable INetwork network, boolean displayCraftText, @Nullable StorageTrackerEntry entry) { + public static void writeItemGridStack(PacketBuffer buf, ItemStack stack, UUID id, boolean craftable, @Nullable INetwork network, @Nullable StorageTrackerEntry entry) { writeItemStack(buf, stack); + buf.writeBoolean(craftable); buf.writeUniqueId(id); - if (network != null) { - buf.writeBoolean(network.getCraftingManager().getPattern(stack) != null); - buf.writeBoolean(displayCraftText); - } else { - buf.writeBoolean(false); - buf.writeBoolean(false); - } - if (entry == null) { buf.writeBoolean(false); } else { @@ -101,31 +94,24 @@ public final class StackUtils { public static ItemGridStack readItemGridStack(PacketBuffer buf) { ItemStack stack = readItemStack(buf); - UUID id = buf.readUniqueId(); + boolean craftable = buf.readBoolean(); - boolean displayCraftText = buf.readBoolean(); + UUID id = buf.readUniqueId(); StorageTrackerEntry entry = null; if (buf.readBoolean()) { entry = new StorageTrackerEntry(buf.readLong(), buf.readString()); } - return new ItemGridStack(id, stack, craftable, displayCraftText, entry); + return new ItemGridStack(id, stack, craftable, entry); } - public static void writeFluidGridStack(PacketBuffer buf, FluidStack stack, UUID id, @Nullable INetwork network, boolean displayCraftText, @Nullable StorageTrackerEntry entry) { + public static void writeFluidGridStack(PacketBuffer buf, FluidStack stack, UUID id, boolean craftable, @Nullable INetwork network, @Nullable StorageTrackerEntry entry) { stack.writeToPacket(buf); + buf.writeBoolean(craftable); buf.writeUniqueId(id); - if (network != null) { - buf.writeBoolean(network.getCraftingManager().getPattern(stack) != null); - buf.writeBoolean(displayCraftText); - } else { - buf.writeBoolean(false); - buf.writeBoolean(false); - } - if (entry == null) { buf.writeBoolean(false); } else { @@ -138,16 +124,15 @@ public final class StackUtils { public static FluidGridStack readFluidGridStack(PacketBuffer buf) { FluidStack stack = FluidStack.readFromPacket(buf); - UUID id = buf.readUniqueId(); boolean craftable = buf.readBoolean(); - boolean displayCraftText = buf.readBoolean(); + UUID id = buf.readUniqueId(); StorageTrackerEntry entry = null; if (buf.readBoolean()) { entry = new StorageTrackerEntry(buf.readLong(), buf.readString()); } - return new FluidGridStack(id, stack, entry, craftable, displayCraftText); + return new FluidGridStack(id, stack, entry, craftable); } @SuppressWarnings("unchecked") diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java index 8648251d3..64d43e446 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/WorldUtils.java @@ -77,7 +77,7 @@ public final class WorldUtils { } public static void sendNoPermissionMessage(PlayerEntity player) { - player.sendMessage(new TranslationTextComponent("misc.refinedstorage:security.no_permission").setStyle(new Style().setColor(TextFormatting.RED))); + player.sendMessage(new TranslationTextComponent("misc.refinedstorage.security.no_permission").setStyle(new Style().setColor(TextFormatting.RED))); } public static RayTraceResult rayTracePlayer(World world, PlayerEntity player) { diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.json b/src/main/resources/assets/refinedstorage/lang/en_us.json index 700370295..f18e96742 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage/lang/en_us.json @@ -56,18 +56,18 @@ "gui.refinedstorage.fluid_interface": "Fluid Interface", "gui.refinedstorage.fluid_interface.in": "In", "gui.refinedstorage.fluid_interface.out": "Out", - "gui.refinedstorage:crafting_preview": "Crafting Preview", - "gui.refinedstorage:crafting_preview.to_craft": "To craft: %d", - "gui.refinedstorage:crafting_preview.available": "Available: %d", - "gui.refinedstorage:crafting_preview.missing": "Missing: %d", - "gui.refinedstorage:crafting_preview.error": "Request failed", - "gui.refinedstorage:crafting_preview.error.recursive.0": "One of the crafting ingredients ended up needing", - "gui.refinedstorage:crafting_preview.error.recursive.1": "itself.", - "gui.refinedstorage:crafting_preview.error.recursive.2": "You need to remove the pattern or make sure", - "gui.refinedstorage:crafting_preview.error.recursive.3": "the pattern is not used during crafting.", - "gui.refinedstorage:crafting_preview.error.recursive.4": "Offending pattern:", - "gui.refinedstorage:crafting_preview.error.too_complex.0": "The crafting task calculation was too complex", - "gui.refinedstorage:crafting_preview.error.too_complex.1": "and was stopped to avoid server strain.", + "gui.refinedstorage.crafting_preview": "Crafting Preview", + "gui.refinedstorage.crafting_preview.to_craft": "To craft: %d", + "gui.refinedstorage.crafting_preview.available": "Available: %d", + "gui.refinedstorage.crafting_preview.missing": "Missing: %d", + "gui.refinedstorage.crafting_preview.error": "Request failed", + "gui.refinedstorage.crafting_preview.error.recursive.0": "One of the crafting ingredients ended up needing", + "gui.refinedstorage.crafting_preview.error.recursive.1": "itself.", + "gui.refinedstorage.crafting_preview.error.recursive.2": "You need to remove the pattern or make sure", + "gui.refinedstorage.crafting_preview.error.recursive.3": "the pattern is not used during crafting.", + "gui.refinedstorage.crafting_preview.error.recursive.4": "Offending pattern:", + "gui.refinedstorage.crafting_preview.error.too_complex.0": "The crafting task calculation was too complex", + "gui.refinedstorage.crafting_preview.error.too_complex.1": "and was stopped to avoid server strain.", "gui.refinedstorage.security_manager": "Security Manager", "gui.refinedstorage.security_manager.configure": "Configure", "gui.refinedstorage.security_manager.permission.0": "Insert", @@ -103,8 +103,8 @@ "misc.refinedstorage.pattern.outputs": "Outputs", "misc.refinedstorage.pattern.invalid": "Invalid pattern", "misc.refinedstorage.pattern.oredict": "Uses ore dictionary", - "misc.refinedstorage:security.no_permission": "You have no permission to perform that action.", - "misc.refinedstorage:start": "Start", + "misc.refinedstorage.security.no_permission": "You have no permission to perform that action.", + "misc.refinedstorage.start": "Start", "misc.refinedstorage.clear": "Clear", "misc.refinedstorage.set": "Set", "misc.refinedstorage:cancel_all": "Cancel All",