mirror of
https://github.com/Ellpeck/PrettyPipes.git
synced 2024-11-25 04:58:34 +01:00
Compare commits
7 commits
ae182423c1
...
cb98ef5be1
Author | SHA1 | Date | |
---|---|---|---|
cb98ef5be1 | |||
43bf12924f | |||
58f665452d | |||
e3fad2bd6a | |||
2f75a2c774 | |||
9ff65e3b06 | |||
db58a7b105 |
14 changed files with 84 additions and 38 deletions
|
@ -13,7 +13,7 @@ apply plugin: 'net.minecraftforge.gradle'
|
||||||
apply plugin: 'eclipse'
|
apply plugin: 'eclipse'
|
||||||
apply plugin: 'maven-publish'
|
apply plugin: 'maven-publish'
|
||||||
|
|
||||||
version = '1.9.6'
|
version = '1.9.7'
|
||||||
group = 'de.ellpeck.prettypipes' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
group = 'de.ellpeck.prettypipes' // http://maven.apache.org/guides/mini/guide-naming-conventions.html
|
||||||
archivesBaseName = 'PrettyPipes'
|
archivesBaseName = 'PrettyPipes'
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,7 @@ public class ItemFilter extends ItemStackHandler {
|
||||||
super(size);
|
super(size);
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
this.pipe = pipe;
|
this.pipe = pipe;
|
||||||
if (stack.hasTag())
|
this.load();
|
||||||
this.deserializeNBT(stack.getTag().getCompound("filter"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Slot> getSlots(int x, int y) {
|
public List<Slot> getSlots(int x, int y) {
|
||||||
|
@ -70,12 +69,13 @@ public class ItemFilter extends ItemStackHandler {
|
||||||
return buttons;
|
return buttons;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onButtonPacket(int id) {
|
public void onButtonPacket(IFilteredContainer menu, int id) {
|
||||||
if (id == 0 && this.canModifyWhitelist) {
|
if (id == 0 && this.canModifyWhitelist) {
|
||||||
this.isWhitelist = !this.isWhitelist;
|
this.isWhitelist = !this.isWhitelist;
|
||||||
this.modified = true;
|
this.modified = true;
|
||||||
this.save();
|
this.save();
|
||||||
} else if (id == 1 && this.canPopulateFromInventories) {
|
} else if (id == 1 && this.canPopulateFromInventories) {
|
||||||
|
boolean changed = false;
|
||||||
// populate filter from inventories
|
// populate filter from inventories
|
||||||
List<ItemFilter> filters = this.pipe.getFilters();
|
List<ItemFilter> filters = this.pipe.getFilters();
|
||||||
for (Direction direction : Direction.values()) {
|
for (Direction direction : Direction.values()) {
|
||||||
|
@ -91,12 +91,15 @@ public class ItemFilter extends ItemStackHandler {
|
||||||
// try inserting into ourselves and any filter increase modifiers
|
// try inserting into ourselves and any filter increase modifiers
|
||||||
for (ItemFilter filter : filters) {
|
for (ItemFilter filter : filters) {
|
||||||
if (ItemHandlerHelper.insertItem(filter, copy, false).isEmpty()) {
|
if (ItemHandlerHelper.insertItem(filter, copy, false).isEmpty()) {
|
||||||
|
changed = true;
|
||||||
filter.save();
|
filter.save();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (changed)
|
||||||
|
menu.onFilterPopulated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,6 +129,11 @@ public class ItemFilter extends ItemStackHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void load() {
|
||||||
|
if (this.stack.hasTag())
|
||||||
|
this.deserializeNBT(this.stack.getTag().getCompound("filter"));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompoundNBT serializeNBT() {
|
public CompoundNBT serializeNBT() {
|
||||||
CompoundNBT nbt = super.serializeNBT();
|
CompoundNBT nbt = super.serializeNBT();
|
||||||
|
@ -154,6 +162,10 @@ public class ItemFilter extends ItemStackHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IFilteredContainer {
|
public interface IFilteredContainer {
|
||||||
|
|
||||||
ItemFilter getFilter();
|
ItemFilter getFilter();
|
||||||
|
|
||||||
|
default void onFilterPopulated() {}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -464,13 +464,13 @@ public class PipeNetwork implements ICapabilitySerializable<CompoundNBT>, GraphL
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clearDestinationCache(BlockPos... nodes) {
|
public void clearDestinationCache(List<BlockPos> nodes) {
|
||||||
this.startProfile("clear_node_cache");
|
this.startProfile("clear_node_cache");
|
||||||
// remove caches for the nodes
|
// remove caches for the nodes
|
||||||
for (BlockPos node : nodes)
|
for (BlockPos node : nodes)
|
||||||
this.nodeToConnectedNodes.keySet().remove(node);
|
this.nodeToConnectedNodes.keySet().remove(node);
|
||||||
// remove caches that contain the nodes as a destination
|
// remove caches that contain the nodes as a destination
|
||||||
this.nodeToConnectedNodes.values().removeIf(cached -> Arrays.stream(nodes).anyMatch(cached::contains));
|
this.nodeToConnectedNodes.values().removeIf(cached -> nodes.stream().anyMatch(cached::contains));
|
||||||
this.endProfile();
|
this.endProfile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,12 +493,12 @@ public class PipeNetwork implements ICapabilitySerializable<CompoundNBT>, GraphL
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void edgeAdded(GraphEdgeChangeEvent<BlockPos, NetworkEdge> e) {
|
public void edgeAdded(GraphEdgeChangeEvent<BlockPos, NetworkEdge> e) {
|
||||||
this.clearDestinationCache(e.getEdgeSource(), e.getEdgeTarget());
|
this.clearDestinationCache(e.getEdge().pipes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void edgeRemoved(GraphEdgeChangeEvent<BlockPos, NetworkEdge> e) {
|
public void edgeRemoved(GraphEdgeChangeEvent<BlockPos, NetworkEdge> e) {
|
||||||
this.clearDestinationCache(e.getEdgeSource(), e.getEdgeTarget());
|
this.clearDestinationCache(e.getEdge().pipes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -2,7 +2,6 @@ package de.ellpeck.prettypipes.packets;
|
||||||
|
|
||||||
import de.ellpeck.prettypipes.Utility;
|
import de.ellpeck.prettypipes.Utility;
|
||||||
import de.ellpeck.prettypipes.items.IModule;
|
import de.ellpeck.prettypipes.items.IModule;
|
||||||
import de.ellpeck.prettypipes.misc.ItemFilter;
|
|
||||||
import de.ellpeck.prettypipes.misc.ItemFilter.IFilteredContainer;
|
import de.ellpeck.prettypipes.misc.ItemFilter.IFilteredContainer;
|
||||||
import de.ellpeck.prettypipes.pipe.PipeTileEntity;
|
import de.ellpeck.prettypipes.pipe.PipeTileEntity;
|
||||||
import de.ellpeck.prettypipes.pipe.containers.AbstractPipeContainer;
|
import de.ellpeck.prettypipes.pipe.containers.AbstractPipeContainer;
|
||||||
|
@ -100,9 +99,8 @@ public class PacketButton {
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
FILTER_CHANGE((pos, data, player) -> {
|
FILTER_CHANGE((pos, data, player) -> {
|
||||||
IFilteredContainer container = (IFilteredContainer) player.openContainer;
|
if (player.openContainer instanceof IFilteredContainer)
|
||||||
ItemFilter filter = container.getFilter();
|
((IFilteredContainer) player.openContainer).getFilter().onButtonPacket((IFilteredContainer) player.openContainer, data[0]);
|
||||||
filter.onButtonPacket(data[0]);
|
|
||||||
}),
|
}),
|
||||||
STACK_SIZE_MODULE_BUTTON((pos, data, player) -> {
|
STACK_SIZE_MODULE_BUTTON((pos, data, player) -> {
|
||||||
AbstractPipeContainer<?> container = (AbstractPipeContainer<?>) player.openContainer;
|
AbstractPipeContainer<?> container = (AbstractPipeContainer<?>) player.openContainer;
|
||||||
|
@ -114,7 +112,7 @@ public class PacketButton {
|
||||||
}),
|
}),
|
||||||
CRAFT_TERMINAL_REQUEST((pos, data, player) -> {
|
CRAFT_TERMINAL_REQUEST((pos, data, player) -> {
|
||||||
CraftingTerminalTileEntity tile = Utility.getTileEntity(CraftingTerminalTileEntity.class, player.world, pos);
|
CraftingTerminalTileEntity tile = Utility.getTileEntity(CraftingTerminalTileEntity.class, player.world, pos);
|
||||||
tile.requestCraftingItems(player, data[0]);
|
tile.requestCraftingItems(player, data[0], data[1] > 0);
|
||||||
}),
|
}),
|
||||||
CANCEL_CRAFTING((pos, data, player) -> {
|
CANCEL_CRAFTING((pos, data, player) -> {
|
||||||
ItemTerminalTileEntity tile = Utility.getTileEntity(ItemTerminalTileEntity.class, player.world, pos);
|
ItemTerminalTileEntity tile = Utility.getTileEntity(ItemTerminalTileEntity.class, player.world, pos);
|
||||||
|
|
|
@ -14,11 +14,13 @@ public class PacketRequest {
|
||||||
|
|
||||||
private BlockPos pos;
|
private BlockPos pos;
|
||||||
private ItemStack stack;
|
private ItemStack stack;
|
||||||
|
private int nbtHash;
|
||||||
private int amount;
|
private int amount;
|
||||||
|
|
||||||
public PacketRequest(BlockPos pos, ItemStack stack, int amount) {
|
public PacketRequest(BlockPos pos, ItemStack stack, int amount) {
|
||||||
this.pos = pos;
|
this.pos = pos;
|
||||||
this.stack = stack;
|
this.stack = stack;
|
||||||
|
this.nbtHash = stack.getTag().hashCode();
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +32,7 @@ public class PacketRequest {
|
||||||
PacketRequest packet = new PacketRequest();
|
PacketRequest packet = new PacketRequest();
|
||||||
packet.pos = buf.readBlockPos();
|
packet.pos = buf.readBlockPos();
|
||||||
packet.stack = buf.readItemStack();
|
packet.stack = buf.readItemStack();
|
||||||
|
packet.nbtHash = buf.readVarInt();
|
||||||
packet.amount = buf.readVarInt();
|
packet.amount = buf.readVarInt();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
@ -37,6 +40,7 @@ public class PacketRequest {
|
||||||
public static void toBytes(PacketRequest packet, PacketBuffer buf) {
|
public static void toBytes(PacketRequest packet, PacketBuffer buf) {
|
||||||
buf.writeBlockPos(packet.pos);
|
buf.writeBlockPos(packet.pos);
|
||||||
buf.writeItemStack(packet.stack);
|
buf.writeItemStack(packet.stack);
|
||||||
|
buf.writeVarInt(packet.nbtHash);
|
||||||
buf.writeVarInt(packet.amount);
|
buf.writeVarInt(packet.amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +52,7 @@ public class PacketRequest {
|
||||||
PlayerEntity player = ctx.get().getSender();
|
PlayerEntity player = ctx.get().getSender();
|
||||||
ItemTerminalTileEntity tile = Utility.getTileEntity(ItemTerminalTileEntity.class, player.world, message.pos);
|
ItemTerminalTileEntity tile = Utility.getTileEntity(ItemTerminalTileEntity.class, player.world, message.pos);
|
||||||
message.stack.setCount(message.amount);
|
message.stack.setCount(message.amount);
|
||||||
tile.requestItem(player, message.stack);
|
tile.requestItem(player, message.stack, message.nbtHash);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ctx.get().setPacketHandled(true);
|
ctx.get().setPacketHandled(true);
|
||||||
|
|
|
@ -180,7 +180,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide
|
||||||
if (prio != this.priority) {
|
if (prio != this.priority) {
|
||||||
this.priority = prio;
|
this.priority = prio;
|
||||||
// clear the cache so that it's reevaluated based on priority
|
// clear the cache so that it's reevaluated based on priority
|
||||||
PipeNetwork.get(this.world).clearDestinationCache(this.pos);
|
PipeNetwork.get(this.world).clearDestinationCache(Collections.singletonList(this.pos));
|
||||||
}
|
}
|
||||||
profiler.endSection();
|
profiler.endSection();
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,8 +169,10 @@ public class CraftingModuleItem extends ModuleItem {
|
||||||
|
|
||||||
ItemEquality[] equalityTypes = ItemFilter.getEqualityTypes(tile);
|
ItemEquality[] equalityTypes = ItemFilter.getEqualityTypes(tile);
|
||||||
int resultAmount = this.getResultAmountPerCraft(module, stack, equalityTypes);
|
int resultAmount = this.getResultAmountPerCraft(module, stack, equalityTypes);
|
||||||
|
// calculate how many crafting *operations* to do (as opposed to how many *items* to craft)
|
||||||
int requiredCrafts = MathHelper.ceil(stack.getCount() / (float) resultAmount);
|
int requiredCrafts = MathHelper.ceil(stack.getCount() / (float) resultAmount);
|
||||||
int toCraft = Math.min(craftableAmount, requiredCrafts);
|
int craftableCrafts = MathHelper.ceil(craftableAmount / (float) resultAmount);
|
||||||
|
int toCraft = Math.min(craftableCrafts, requiredCrafts);
|
||||||
|
|
||||||
ItemStackHandler input = this.getInput(module);
|
ItemStackHandler input = this.getInput(module);
|
||||||
for (int i = 0; i < input.getSlots(); i++) {
|
for (int i = 0; i < input.getSlots(); i++) {
|
||||||
|
|
|
@ -35,4 +35,11 @@ public class FilterModuleContainer extends AbstractPipeContainer<FilterModuleIte
|
||||||
public ItemFilter getFilter() {
|
public ItemFilter getFilter() {
|
||||||
return this.filter;
|
return this.filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFilterPopulated() {
|
||||||
|
// reload the filter so that it displays correctly on the client
|
||||||
|
this.filter.load();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
package de.ellpeck.prettypipes.pressurizer;
|
package de.ellpeck.prettypipes.pressurizer;
|
||||||
|
|
||||||
import de.ellpeck.prettypipes.Utility;
|
import de.ellpeck.prettypipes.Utility;
|
||||||
import de.ellpeck.prettypipes.pipe.ConnectionType;
|
|
||||||
import de.ellpeck.prettypipes.pipe.IPipeConnectable;
|
|
||||||
import de.ellpeck.prettypipes.terminal.ItemTerminalTileEntity;
|
|
||||||
import net.minecraft.block.BlockRenderType;
|
import net.minecraft.block.BlockRenderType;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.ContainerBlock;
|
import net.minecraft.block.ContainerBlock;
|
||||||
|
@ -15,7 +12,6 @@ import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.ActionResultType;
|
import net.minecraft.util.ActionResultType;
|
||||||
import net.minecraft.util.Direction;
|
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.BlockRayTraceResult;
|
import net.minecraft.util.math.BlockRayTraceResult;
|
||||||
|
@ -28,6 +24,7 @@ import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class PressurizerBlock extends ContainerBlock {
|
public class PressurizerBlock extends ContainerBlock {
|
||||||
|
|
||||||
public PressurizerBlock() {
|
public PressurizerBlock() {
|
||||||
super(Properties.create(Material.ROCK).hardnessAndResistance(3).sound(SoundType.STONE));
|
super(Properties.create(Material.ROCK).hardnessAndResistance(3).sound(SoundType.STONE));
|
||||||
}
|
}
|
||||||
|
@ -56,4 +53,17 @@ public class PressurizerBlock extends ContainerBlock {
|
||||||
public void addInformation(ItemStack stack, @Nullable IBlockReader worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
|
public void addInformation(ItemStack stack, @Nullable IBlockReader worldIn, List<ITextComponent> tooltip, ITooltipFlag flagIn) {
|
||||||
Utility.addTooltip(this.getRegistryName().getPath(), tooltip);
|
Utility.addTooltip(this.getRegistryName().getPath(), tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasComparatorInputOverride(BlockState state) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getComparatorInputOverride(BlockState state, World world, BlockPos pos) {
|
||||||
|
PressurizerTileEntity pipe = Utility.getTileEntity(PressurizerTileEntity.class, world, pos);
|
||||||
|
if (pipe == null)
|
||||||
|
return 0;
|
||||||
|
return (int) (pipe.getEnergy() / (float) pipe.getMaxEnergy() * 15);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,6 @@ import de.ellpeck.prettypipes.network.PipeNetwork;
|
||||||
import de.ellpeck.prettypipes.pipe.ConnectionType;
|
import de.ellpeck.prettypipes.pipe.ConnectionType;
|
||||||
import de.ellpeck.prettypipes.pipe.IPipeConnectable;
|
import de.ellpeck.prettypipes.pipe.IPipeConnectable;
|
||||||
import de.ellpeck.prettypipes.pipe.PipeTileEntity;
|
import de.ellpeck.prettypipes.pipe.PipeTileEntity;
|
||||||
import de.ellpeck.prettypipes.terminal.containers.ItemTerminalContainer;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.entity.player.PlayerInventory;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
|
@ -19,12 +18,10 @@ import net.minecraft.network.NetworkManager;
|
||||||
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
|
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
|
||||||
import net.minecraft.tileentity.ITickableTileEntity;
|
import net.minecraft.tileentity.ITickableTileEntity;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.tileentity.TileEntityType;
|
|
||||||
import net.minecraft.util.Direction;
|
import net.minecraft.util.Direction;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.ITextComponent;
|
import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.TranslationTextComponent;
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
import net.minecraft.world.World;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
import net.minecraftforge.common.util.LazyOptional;
|
||||||
import net.minecraftforge.energy.CapabilityEnergy;
|
import net.minecraftforge.energy.CapabilityEnergy;
|
||||||
|
@ -136,9 +133,10 @@ public class PressurizerTileEntity extends TileEntity implements INamedContainer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// send energy update
|
// send energy update and comparator output
|
||||||
if (this.lastEnergy != this.storage.getEnergyStored() && this.world.getGameTime() % 10 == 0) {
|
if (this.lastEnergy != this.storage.getEnergyStored() && this.world.getGameTime() % 10 == 0) {
|
||||||
this.lastEnergy = this.storage.getEnergyStored();
|
this.lastEnergy = this.storage.getEnergyStored();
|
||||||
|
this.world.updateComparatorOutputLevel(this.pos, this.getBlockState().getBlock());
|
||||||
Utility.sendTileEntityToClients(this);
|
Utility.sendTileEntityToClients(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ public class CraftingTerminalTileEntity extends ItemTerminalTileEntity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestCraftingItems(PlayerEntity player, int maxAmount) {
|
public void requestCraftingItems(PlayerEntity player, int maxAmount, boolean force) {
|
||||||
PipeTileEntity pipe = this.getConnectedPipe();
|
PipeTileEntity pipe = this.getConnectedPipe();
|
||||||
if (pipe == null)
|
if (pipe == null)
|
||||||
return;
|
return;
|
||||||
|
@ -117,7 +117,10 @@ public class CraftingTerminalTileEntity extends ItemTerminalTileEntity {
|
||||||
int lowestAvailable = getAvailableCrafts(pipe, this.craftItems.getSlots(), i -> ItemHandlerHelper.copyStackWithSize(this.getRequestedCraftItem(i), 1), this::isGhostItem, s -> {
|
int lowestAvailable = getAvailableCrafts(pipe, this.craftItems.getSlots(), i -> ItemHandlerHelper.copyStackWithSize(this.getRequestedCraftItem(i), 1), this::isGhostItem, s -> {
|
||||||
NetworkItem item = this.networkItems.get(s);
|
NetworkItem item = this.networkItems.get(s);
|
||||||
return item != null ? item.getLocations() : Collections.emptyList();
|
return item != null ? item.getLocations() : Collections.emptyList();
|
||||||
}, onItemUnavailable(player), new Stack<>(), ItemEquality.NBT);
|
}, onItemUnavailable(player, force), new Stack<>(), ItemEquality.NBT);
|
||||||
|
// if we're forcing, just pretend we have one available
|
||||||
|
if (lowestAvailable <= 0 && force)
|
||||||
|
lowestAvailable = maxAmount;
|
||||||
if (lowestAvailable > 0) {
|
if (lowestAvailable > 0) {
|
||||||
// if we're limiting the amount, pretend we only have that amount available
|
// if we're limiting the amount, pretend we only have that amount available
|
||||||
if (maxAmount < lowestAvailable)
|
if (maxAmount < lowestAvailable)
|
||||||
|
@ -128,9 +131,11 @@ public class CraftingTerminalTileEntity extends ItemTerminalTileEntity {
|
||||||
continue;
|
continue;
|
||||||
requested = requested.copy();
|
requested = requested.copy();
|
||||||
requested.setCount(lowestAvailable);
|
requested.setCount(lowestAvailable);
|
||||||
this.requestItemImpl(requested, onItemUnavailable(player));
|
this.requestItemImpl(requested, onItemUnavailable(player, force));
|
||||||
}
|
}
|
||||||
player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".sending_ingredients", lowestAvailable).setStyle(Style.EMPTY.setFormatting(TextFormatting.GREEN)), UUID.randomUUID());
|
player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".sending_ingredients", lowestAvailable).setStyle(Style.EMPTY.setFormatting(TextFormatting.GREEN)), UUID.randomUUID());
|
||||||
|
} else {
|
||||||
|
player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".hold_alt"), UUID.randomUUID());
|
||||||
}
|
}
|
||||||
network.endProfile();
|
network.endProfile();
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,15 +154,23 @@ public class ItemTerminalTileEntity extends TileEntity implements INamedContaine
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestItem(PlayerEntity player, ItemStack stack) {
|
public void requestItem(PlayerEntity player, ItemStack stack, int nbtHash) {
|
||||||
PipeNetwork network = PipeNetwork.get(this.world);
|
PipeNetwork network = PipeNetwork.get(this.world);
|
||||||
network.startProfile("terminal_request_item");
|
network.startProfile("terminal_request_item");
|
||||||
this.updateItems();
|
this.updateItems();
|
||||||
int requested = this.requestItemImpl(stack, onItemUnavailable(player));
|
if (nbtHash != 0) {
|
||||||
|
ItemStack filter = stack;
|
||||||
|
stack = this.networkItems.values().stream()
|
||||||
|
.map(NetworkItem::asStack)
|
||||||
|
// don't compare with nbt equality here or the whole hashing thing is pointless
|
||||||
|
.filter(s -> ItemEquality.compareItems(s, filter) && s.getTag().hashCode() == nbtHash)
|
||||||
|
.findFirst().orElse(filter);
|
||||||
|
}
|
||||||
|
int requested = this.requestItemImpl(stack, onItemUnavailable(player, false));
|
||||||
if (requested > 0) {
|
if (requested > 0) {
|
||||||
player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".sending", requested, stack.getDisplayName()).setStyle(Style.EMPTY.setFormatting(TextFormatting.GREEN)), UUID.randomUUID());
|
player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".sending", requested, stack.getDisplayName()).setStyle(Style.EMPTY.setFormatting(TextFormatting.GREEN)), UUID.randomUUID());
|
||||||
} else {
|
} else {
|
||||||
onItemUnavailable(player).accept(stack);
|
onItemUnavailable(player, false).accept(stack);
|
||||||
}
|
}
|
||||||
network.endProfile();
|
network.endProfile();
|
||||||
}
|
}
|
||||||
|
@ -313,7 +321,11 @@ public class ItemTerminalTileEntity extends TileEntity implements INamedContaine
|
||||||
return Pair.of(requests, remain);
|
return Pair.of(requests, remain);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Consumer<ItemStack> onItemUnavailable(PlayerEntity player) {
|
public static Consumer<ItemStack> onItemUnavailable(PlayerEntity player, boolean ignore) {
|
||||||
return s -> player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".not_found", s.getDisplayName()).setStyle(Style.EMPTY.setFormatting(TextFormatting.RED)), UUID.randomUUID());
|
return s -> {
|
||||||
|
if (ignore)
|
||||||
|
return;
|
||||||
|
player.sendMessage(new TranslationTextComponent("info." + PrettyPipes.ID + ".not_found", s.getDisplayName()).setStyle(Style.EMPTY.setFormatting(TextFormatting.RED)), UUID.randomUUID());
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,11 @@
|
||||||
package de.ellpeck.prettypipes.terminal.containers;
|
package de.ellpeck.prettypipes.terminal.containers;
|
||||||
|
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
|
||||||
import de.ellpeck.prettypipes.PrettyPipes;
|
import de.ellpeck.prettypipes.PrettyPipes;
|
||||||
import de.ellpeck.prettypipes.packets.PacketButton;
|
import de.ellpeck.prettypipes.packets.PacketButton;
|
||||||
import de.ellpeck.prettypipes.packets.PacketHandler;
|
import de.ellpeck.prettypipes.packets.PacketHandler;
|
||||||
import de.ellpeck.prettypipes.packets.PacketRequest;
|
|
||||||
import de.ellpeck.prettypipes.terminal.CraftingTerminalTileEntity;
|
import de.ellpeck.prettypipes.terminal.CraftingTerminalTileEntity;
|
||||||
import net.minecraft.client.gui.widget.Widget;
|
|
||||||
import net.minecraft.client.gui.widget.button.Button;
|
import net.minecraft.client.gui.widget.button.Button;
|
||||||
import net.minecraft.client.resources.I18n;
|
|
||||||
import net.minecraft.entity.player.PlayerInventory;
|
import net.minecraft.entity.player.PlayerInventory;
|
||||||
import net.minecraft.inventory.container.Slot;
|
import net.minecraft.inventory.container.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
@ -19,6 +14,7 @@ import net.minecraft.util.text.ITextComponent;
|
||||||
import net.minecraft.util.text.TranslationTextComponent;
|
import net.minecraft.util.text.TranslationTextComponent;
|
||||||
|
|
||||||
public class CraftingTerminalGui extends ItemTerminalGui {
|
public class CraftingTerminalGui extends ItemTerminalGui {
|
||||||
|
|
||||||
private static final ResourceLocation TEXTURE = new ResourceLocation(PrettyPipes.ID, "textures/gui/crafting_terminal.png");
|
private static final ResourceLocation TEXTURE = new ResourceLocation(PrettyPipes.ID, "textures/gui/crafting_terminal.png");
|
||||||
private Button requestButton;
|
private Button requestButton;
|
||||||
|
|
||||||
|
@ -32,7 +28,8 @@ public class CraftingTerminalGui extends ItemTerminalGui {
|
||||||
super.init();
|
super.init();
|
||||||
this.requestButton = this.addButton(new Button(this.guiLeft + 8, this.guiTop + 100, 50, 20, new TranslationTextComponent("info." + PrettyPipes.ID + ".request"), button -> {
|
this.requestButton = this.addButton(new Button(this.guiLeft + 8, this.guiTop + 100, 50, 20, new TranslationTextComponent("info." + PrettyPipes.ID + ".request"), button -> {
|
||||||
int amount = requestModifier();
|
int amount = requestModifier();
|
||||||
PacketHandler.sendToServer(new PacketButton(this.container.tile.getPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, amount));
|
int force = hasAltDown() ? 1 : 0;
|
||||||
|
PacketHandler.sendToServer(new PacketButton(this.container.tile.getPos(), PacketButton.ButtonResult.CRAFT_TERMINAL_REQUEST, amount, force));
|
||||||
}));
|
}));
|
||||||
this.tick();
|
this.tick();
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
"info.prettypipes.limit_to_max_off": "Don't limit to one stack",
|
"info.prettypipes.limit_to_max_off": "Don't limit to one stack",
|
||||||
"info.prettypipes.request": "Request",
|
"info.prettypipes.request": "Request",
|
||||||
"info.prettypipes.not_found": "%s not found",
|
"info.prettypipes.not_found": "%s not found",
|
||||||
|
"info.prettypipes.hold_alt": "Hold Alt to request anyway",
|
||||||
"info.prettypipes.sending": "Sending %s %s",
|
"info.prettypipes.sending": "Sending %s %s",
|
||||||
"info.prettypipes.sending_ingredients": "Sending %s sets of ingredients",
|
"info.prettypipes.sending_ingredients": "Sending %s sets of ingredients",
|
||||||
"info.prettypipes.order": "Order by %s",
|
"info.prettypipes.order": "Order by %s",
|
||||||
|
|
Loading…
Reference in a new issue