Re-add autocrafting
This commit is contained in:
@@ -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());
|
||||
|
@@ -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<ICraftingPattern> getPatterns();
|
||||
|
||||
/**
|
||||
* Rebuilds the pattern list.
|
||||
*/
|
||||
void rebuild();
|
||||
void invalidate();
|
||||
|
||||
/**
|
||||
* Return a crafting pattern from an item stack.
|
||||
|
@@ -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
|
||||
|
@@ -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<T> {
|
||||
/**
|
||||
* @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();
|
||||
}
|
||||
|
@@ -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<ByteBuf, ICraftingPreviewElement> factory);
|
||||
void add(ResourceLocation id, Function<PacketBuffer, ICraftingPreviewElement> 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<ByteBuf, ICraftingPreviewElement> get(String id);
|
||||
Function<PacketBuffer, ICraftingPreviewElement> get(ResourceLocation id);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -80,6 +80,11 @@ public interface IStorageCache<T> {
|
||||
*/
|
||||
IStackList<T> getList();
|
||||
|
||||
/**
|
||||
* @return a list of craftables
|
||||
*/
|
||||
IStackList<T> getCraftablesList();
|
||||
|
||||
/**
|
||||
* @return the storages connected to this network
|
||||
*/
|
||||
|
@@ -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) {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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<ICraftingPattern, CraftingPatternChain> map = new TCustomHashMap<>(new HashingStrategy<ICraftingPattern>() {
|
||||
@Override
|
||||
public int computeHashCode(ICraftingPattern pattern) {
|
||||
return pattern.getChainHashCode();
|
||||
}
|
||||
private final Map<Key, CraftingPatternChain> map = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public boolean equals(ICraftingPattern left, ICraftingPattern right) {
|
||||
return left.canBeInChainWith(right);
|
||||
}
|
||||
});*/
|
||||
// TODO: broken
|
||||
private Map<ICraftingPattern, CraftingPatternChain> map = new HashMap<>();
|
||||
|
||||
public CraftingPatternChainList(List<ICraftingPattern> patterns) {
|
||||
public CraftingPatternChainList(Collection<ICraftingPattern> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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<String, Function<ByteBuf, ICraftingPreviewElement>> registry = new HashMap<>();
|
||||
private Map<ResourceLocation, Function<PacketBuffer, ICraftingPreviewElement>> registry = new HashMap<>();
|
||||
|
||||
@Override
|
||||
public void add(String id, Function<ByteBuf, ICraftingPreviewElement> factory) {
|
||||
public void add(ResourceLocation id, Function<PacketBuffer, ICraftingPreviewElement> factory) {
|
||||
registry.put(id, factory);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public Function<ByteBuf, ICraftingPreviewElement> get(String id) {
|
||||
public Function<PacketBuffer, ICraftingPreviewElement> get(ResourceLocation id) {
|
||||
return registry.get(id);
|
||||
}
|
||||
}
|
||||
|
@@ -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<ItemStack> {
|
||||
public static final String ID = "error";
|
||||
public class ErrorCraftingPreviewElement implements ICraftingPreviewElement<ItemStack> {
|
||||
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<Item
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: Rename to writeToBuffer.
|
||||
@Override
|
||||
public void writeToByteBuf(PacketBuffer buf) {
|
||||
public void write(PacketBuffer buf) {
|
||||
buf.writeInt(type.ordinal());
|
||||
// TODO can't we use writeItemStack here?
|
||||
buf.writeInt(Item.getIdFromItem(stack.getItem()));
|
||||
buf.writeCompoundTag(stack.getTag());
|
||||
buf.writeItemStack(stack);
|
||||
}
|
||||
|
||||
public CraftingTaskErrorType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
// TODO: Rename to fromBuffer
|
||||
public static CraftingPreviewElementError fromByteBuf(PacketBuffer buf) {
|
||||
public static ErrorCraftingPreviewElement read(PacketBuffer buf) {
|
||||
int errorIdx = buf.readInt();
|
||||
CraftingTaskErrorType error = errorIdx >= 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;
|
||||
}
|
||||
}
|
@@ -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<FluidStack> {
|
||||
public static final String ID = "fluid_renderer";
|
||||
public class FluidCraftingPreviewElement implements ICraftingPreviewElement<FluidStack> {
|
||||
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;
|
||||
}
|
||||
}
|
@@ -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<ItemStack> {
|
||||
public static final String ID = "item_renderer";
|
||||
public class ItemCraftingPreviewElement implements ICraftingPreviewElement<ItemStack> {
|
||||
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;
|
||||
}
|
||||
}
|
@@ -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
|
||||
|
@@ -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<String, ICraftingTaskFactory> registry = new HashMap<>();
|
||||
private Map<ResourceLocation, ICraftingTaskFactory> 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);
|
||||
}
|
||||
}
|
||||
|
@@ -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<ICraftingPreviewElement> getPreviewStacks() {
|
||||
Map<Integer, CraftingPreviewElementItemStack> map = new LinkedHashMap<>();
|
||||
Map<Integer, CraftingPreviewElementFluidStack> mapFluids = new LinkedHashMap<>();
|
||||
Map<Integer, ItemCraftingPreviewElement> map = new LinkedHashMap<>();
|
||||
Map<Integer, FluidCraftingPreviewElement> mapFluids = new LinkedHashMap<>();
|
||||
|
||||
for (StackListEntry<ItemStack> 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<FluidStack> 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<ItemStack> 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<FluidStack> 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<ItemStack> 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<FluidStack> 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());
|
||||
|
@@ -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<FluidStack> 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);
|
||||
|
@@ -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<ItemStack> 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);
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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) {
|
||||
|
@@ -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<Integer> 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
|
||||
|
@@ -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<ItemStack> getItemDrawer() {
|
||||
return gui::renderItem;
|
||||
return screen::renderItem;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -29,7 +29,7 @@ public class ElementDrawers implements IElementDrawers {
|
||||
|
||||
@Override
|
||||
public IElementDrawer<String> getStringDrawer() {
|
||||
return gui::renderString;
|
||||
return screen::renderString;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -21,11 +21,12 @@ import java.util.function.Consumer;
|
||||
public class FluidStorageCache implements IStorageCache<FluidStack> {
|
||||
public static final Consumer<INetwork> INVALIDATE = n -> n.getFluidStorageCache().invalidate();
|
||||
|
||||
private INetwork network;
|
||||
private CopyOnWriteArrayList<IStorage<FluidStack>> storages = new CopyOnWriteArrayList<>();
|
||||
private IStackList<FluidStack> list = API.instance().createFluidStackList();
|
||||
private List<IStorageCacheListener<FluidStack>> listeners = new LinkedList<>();
|
||||
private List<StackListResult<FluidStack>> batchedChanges = new ArrayList<>();
|
||||
private final INetwork network;
|
||||
private final CopyOnWriteArrayList<IStorage<FluidStack>> storages = new CopyOnWriteArrayList<>();
|
||||
private final IStackList<FluidStack> list = API.instance().createFluidStackList();
|
||||
private final IStackList<FluidStack> craftables = API.instance().createFluidStackList();
|
||||
private final List<IStorageCacheListener<FluidStack>> listeners = new LinkedList<>();
|
||||
private final List<StackListResult<FluidStack>> batchedChanges = new ArrayList<>();
|
||||
|
||||
public FluidStorageCache(INetwork network) {
|
||||
this.network = network;
|
||||
@@ -117,6 +118,11 @@ public class FluidStorageCache implements IStorageCache<FluidStack> {
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStackList<FluidStack> getCraftablesList() {
|
||||
return craftables;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IStorage<FluidStack>> getStorages() {
|
||||
return storages;
|
||||
|
@@ -21,11 +21,12 @@ import java.util.function.Consumer;
|
||||
public class ItemStorageCache implements IStorageCache<ItemStack> {
|
||||
public static final Consumer<INetwork> INVALIDATE = network -> network.getItemStorageCache().invalidate();
|
||||
|
||||
private INetwork network;
|
||||
private CopyOnWriteArrayList<IStorage<ItemStack>> storages = new CopyOnWriteArrayList<>();
|
||||
private IStackList<ItemStack> list = API.instance().createItemStackList();
|
||||
private List<IStorageCacheListener<ItemStack>> listeners = new LinkedList<>();
|
||||
private List<StackListResult<ItemStack>> batchedChanges = new ArrayList<>();
|
||||
private final INetwork network;
|
||||
private final CopyOnWriteArrayList<IStorage<ItemStack>> storages = new CopyOnWriteArrayList<>();
|
||||
private final IStackList<ItemStack> list = API.instance().createItemStackList();
|
||||
private final IStackList<ItemStack> craftables = API.instance().createItemStackList();
|
||||
private final List<IStorageCacheListener<ItemStack>> listeners = new LinkedList<>();
|
||||
private final List<StackListResult<ItemStack>> batchedChanges = new ArrayList<>();
|
||||
|
||||
public ItemStorageCache(INetwork network) {
|
||||
this.network = network;
|
||||
@@ -119,6 +120,11 @@ public class ItemStorageCache implements IStorageCache<ItemStack> {
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStackList<ItemStack> getCraftablesList() {
|
||||
return craftables;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IStorage<ItemStack>> getStorages() {
|
||||
return storages;
|
||||
|
@@ -79,6 +79,11 @@ public class PortableFluidStorageCache implements IStorageCache<FluidStack> {
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStackList<FluidStack> getCraftablesList() {
|
||||
throw new RuntimeException("Unsupported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IStorage<FluidStack>> getStorages() {
|
||||
return Collections.emptyList();
|
||||
|
@@ -79,6 +79,11 @@ public class PortableItemStorageCache implements IStorageCache<ItemStack> {
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IStackList<ItemStack> getCraftablesList() {
|
||||
throw new RuntimeException("Unsupported");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IStorage<ItemStack>> getStorages() {
|
||||
return Collections.emptyList();
|
||||
|
@@ -27,6 +27,7 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
||||
public static final String NBT_FLUIDS = "Fluids";
|
||||
public static final int VERSION = 1;
|
||||
|
||||
@Nullable
|
||||
private ServerWorld world;
|
||||
private int capacity;
|
||||
private Multimap<Fluid, FluidStack> stacks = ArrayListMultimap.create();
|
||||
@@ -35,11 +36,7 @@ public class FluidStorageDisk implements IStorageDisk<FluidStack> {
|
||||
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<FluidStack> {
|
||||
listener.onChanged();
|
||||
}
|
||||
|
||||
API.instance().getStorageDiskManager(world).markForSaving();
|
||||
if (world != null) {
|
||||
API.instance().getStorageDiskManager(world).markForSaving();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -28,6 +28,7 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
||||
public static final String NBT_ITEMS = "Items";
|
||||
public static final int VERSION = 1;
|
||||
|
||||
@Nullable
|
||||
private ServerWorld world;
|
||||
private int capacity;
|
||||
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
||||
@@ -36,11 +37,7 @@ public class ItemStorageDisk implements IStorageDisk<ItemStack> {
|
||||
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<ItemStack> {
|
||||
listener.onChanged();
|
||||
}
|
||||
|
||||
API.instance().getStorageDiskManager(world).markForSaving();
|
||||
if (world != null) {
|
||||
API.instance().getStorageDiskManager(world).markForSaving();
|
||||
}
|
||||
}
|
||||
}
|
@@ -21,7 +21,7 @@ public class FluidStackList implements IStackList<FluidStack> {
|
||||
|
||||
@Override
|
||||
public StackListResult<FluidStack> add(@Nonnull FluidStack stack, int size) {
|
||||
if (size < 0) {
|
||||
if (stack.isEmpty() || size <= 0) {
|
||||
throw new IllegalArgumentException("Cannot accept empty stack");
|
||||
}
|
||||
|
||||
|
@@ -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<MessageGridCraftingPreview> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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<MessageGridCraftingPreviewResponse, IMessage> {
|
||||
private List<ICraftingPreviewElement> stacks;
|
||||
private int hash;
|
||||
private int quantity;
|
||||
private boolean fluids;
|
||||
|
||||
public MessageGridCraftingPreviewResponse() {
|
||||
}
|
||||
|
||||
public MessageGridCraftingPreviewResponse(List<ICraftingPreviewElement> 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;
|
||||
}
|
||||
}
|
@@ -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<MessageGridCraftingStart> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -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<MessageGridCraftingStartResponse, IMessage> {
|
||||
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;
|
||||
}
|
||||
}
|
@@ -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) {
|
||||
|
@@ -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<NetworkEvent.Context> 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);
|
||||
}
|
||||
}
|
@@ -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<ICraftingPreviewElement> stacks;
|
||||
private UUID id;
|
||||
private int quantity;
|
||||
private boolean fluids;
|
||||
|
||||
public GridCraftingPreviewResponseMessage(List<ICraftingPreviewElement> 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<ICraftingPreviewElement> 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<NetworkEvent.Context> 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);
|
||||
}
|
||||
}
|
@@ -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<NetworkEvent.Context> 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);
|
||||
}
|
||||
}
|
@@ -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<NetworkEvent.Context> ctx) {
|
||||
ctx.get().enqueueWork(() -> {
|
||||
Screen screen = Minecraft.getInstance().currentScreen;
|
||||
|
||||
if (screen instanceof CraftingSettingsScreen) {
|
||||
((CraftingSettingsScreen) screen).close();
|
||||
}
|
||||
});
|
||||
|
||||
ctx.get().setPacketHandled(true);
|
||||
}
|
||||
}
|
@@ -52,7 +52,7 @@ public class GridFluidDeltaMessage {
|
||||
for (StackListResult<FluidStack> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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<FluidStack> 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<FluidStack> stack : message.network.getFluidStorageCache().getCraftablesList().getStacks()) {
|
||||
StackUtils.writeFluidGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getFluidStorageTracker().get(stack.getStack()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -52,7 +52,7 @@ public class GridItemDeltaMessage {
|
||||
for (StackListResult<ItemStack> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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<ItemStack> 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<ItemStack> stack : message.network.getItemStorageCache().getCraftablesList().getStacks()) {
|
||||
StackUtils.writeItemGridStack(buf, stack.getStack(), stack.getId(), true, message.network, message.network.getItemStorageTracker().get(stack.getStack()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -50,7 +50,7 @@ public class PortableGridFluidDeltaMessage {
|
||||
for (StackListResult<FluidStack> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -46,7 +46,7 @@ public class PortableGridFluidUpdateMessage {
|
||||
buf.writeInt(size);
|
||||
|
||||
for (StackListEntry<FluidStack> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -52,7 +52,7 @@ public class PortableGridItemDeltaMessage {
|
||||
for (StackListResult<ItemStack> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -46,7 +46,7 @@ public class PortableGridItemUpdateMessage {
|
||||
buf.writeInt(size);
|
||||
|
||||
for (StackListEntry<ItemStack> 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()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
|
@@ -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<Boolean> {
|
||||
public class CrafterTileDataParameterClientListener implements TileDataParameterClientListener<Boolean> {
|
||||
@Override
|
||||
public void onChanged(boolean initial, Boolean hasRoot) {
|
||||
if (!hasRoot) {
|
@@ -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);
|
||||
}*/
|
||||
}
|
@@ -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<ICraftingPreviewElement> stacks;
|
||||
private Screen parent;
|
||||
private final List<ICraftingPreviewElement> 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<ICraftingPreviewElement> stacks, int hash, int quantity, boolean fluids) {
|
||||
public CraftingPreviewScreen(Screen parent, List<ICraftingPreviewElement> 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);
|
||||
}
|
||||
}
|
@@ -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<CraftingSettingsContainer> {
|
||||
public class CraftingSettingsScreen extends AmountSpecifyingScreen<CraftingSettingsContainer> {
|
||||
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<CraftingSett
|
||||
|
||||
@Override
|
||||
protected String getOkButtonText() {
|
||||
return I18n.format("misc.refinedstorage:start");
|
||||
return I18n.format("misc.refinedstorage.start");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -61,12 +62,14 @@ public class GuiGridCraftingSettings extends AmountSpecifyingScreen<CraftingSett
|
||||
}
|
||||
|
||||
protected void onOkButtonPressed(boolean shiftDown) {
|
||||
Integer quantity = Ints.tryParse(amountField.getText());
|
||||
try {
|
||||
int quantity = Integer.parseInt(amountField.getText());
|
||||
|
||||
if (quantity != null && quantity > 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
|
||||
}
|
||||
}
|
||||
}
|
@@ -405,7 +405,7 @@ public class GridScreen extends BaseScreen<GridContainer> implements IScreenInfo
|
||||
List<String> textLines = Lists.newArrayList(gridStack.getTooltip().split("\n"));
|
||||
List<String> 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<GridContainer> 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) {
|
||||
|
@@ -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());
|
||||
|
@@ -33,8 +33,4 @@ public interface IGridStack {
|
||||
void setTrackerEntry(@Nullable StorageTrackerEntry entry);
|
||||
|
||||
boolean isCraftable();
|
||||
|
||||
boolean doesDisplayCraftText();
|
||||
|
||||
void setDisplayCraftText(boolean displayCraftText);
|
||||
}
|
||||
|
@@ -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());
|
||||
|
@@ -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());
|
||||
|
@@ -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());
|
||||
|
@@ -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<CrafterNetworkNode> {
|
||||
public static final TileDataParameter<Integer, CrafterTile> 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<Boolean, CrafterTile> HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new TileDataParameterClientListenerCrafter().onChanged(t, v));
|
||||
private static final TileDataParameter<Boolean, CrafterTile> HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, v) -> new CrafterTileDataParameterClientListener().onChanged(t, v));
|
||||
|
||||
private LazyOptional<IItemHandler> patternsCapability = LazyOptional.of(() -> getNode().getPatternItems());
|
||||
|
||||
|
@@ -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")
|
||||
|
@@ -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) {
|
||||
|
@@ -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",
|
||||
|
Reference in New Issue
Block a user