Compare commits

...

4 commits

Author SHA1 Message Date
Flanks255
9000eb3fab Something something filter. 2024-05-30 17:13:21 -05:00
Flanks255
66e6123a5f changed wording. 2024-05-30 17:05:14 -05:00
Flanks255
5f3326af64 Changed wip to WIP 2024-05-30 17:02:52 -05:00
Flanks255
6389668bf9 ReAdding Damage Filtering, and NBT filtering. 2024-05-30 17:02:24 -05:00
8 changed files with 146 additions and 92 deletions

View file

@ -79,7 +79,7 @@ public class CommonEvents {
boolean changed = false;
boolean isVoid = ((Sack) invStack.getItem()).isVoid;
FilterSettings filter = new FilterSettings(4, false, false);
FilterSettings filter = new FilterSettings(4, false, false, false, false);
filter.readFromNBT(invStack.getOrCreateTag(), "Filter");
if (isVoid) {

View file

@ -32,7 +32,7 @@ import java.util.UUID;
public class SackContainer extends AbstractContainerMenu implements IButtonReactor {
public final FilterSettings filter = new FilterSettings(4, false,false);
public final FilterSettings filter = new FilterSettings(4, false,false, false, false);
private final ItemStackHandlerAA bagInventory;
private final Inventory inventory;
public boolean autoInsert;

View file

@ -19,7 +19,7 @@ import net.minecraft.world.item.ItemStack;
import javax.annotation.Nonnull;
public class VoidSackContainer extends AbstractContainerMenu implements IButtonReactor {
public final FilterSettings filter = new FilterSettings(4, false,false);
public final FilterSettings filter = new FilterSettings(4, false,false, false, false);
private final ItemStackHandlerAA bagInventory;
private final Inventory inventory;

View file

@ -32,6 +32,8 @@ public class FilterSettingsGui {
public Button whitelistButton;
public Button modButton;
public Button damageButton;
public Button nbtButton;
public FilterSettingsGui(FilterSettings settings, int x, int y, boolean vertical, Consumer<AbstractButton> buttonConsumer, Consumer<Integer> clickConsumer, int idOffset) {
this.theSettings = settings;
@ -42,10 +44,12 @@ public class FilterSettingsGui {
})
.bounds(x, y, 16, 12).build();
buttonConsumer.accept(this.whitelistButton);
if (vertical)
y += 14;
else
x += 18;
this.modButton = Button.builder(Component.literal("MO"), $ -> {
theSettings.respectMod = !theSettings.respectMod;
clickConsumer.accept(idOffset + 1);
@ -53,17 +57,33 @@ public class FilterSettingsGui {
.bounds(x, y, 16, 12).build();
buttonConsumer.accept(this.modButton);
if (vertical)
y += 14;
else
x += 18;
this.damageButton = Button.builder(Component.literal("DM"), $ -> {
theSettings.matchDamage = !theSettings.matchDamage;
clickConsumer.accept(idOffset + 2);
})
.bounds(x, y, 16, 12).build();
buttonConsumer.accept(this.damageButton);
if (vertical)
y += 14;
else
x += 18;
this.nbtButton = Button.builder(Component.literal("DA"), $ -> {
theSettings.matchNBT = !theSettings.matchNBT;
clickConsumer.accept(idOffset + 2);
})
.bounds(x, y, 16, 12).build();
buttonConsumer.accept(this.nbtButton);
this.tick();
}
/* public void buttonClicked(int id) {
CompoundTag data = new CompoundTag();
data.putInt("ButtonID", id);
data.putInt("PlayerID", Minecraft.getInstance().player.getId());
data.putString("WorldID", Minecraft.getInstance().level.dimension().location().toString());
PacketDistributor.SERVER.noArg().send(new PacketClientToServer(data, PacketHandler.GUI_BUTTON_TO_CONTAINER_HANDLER));
}*/
public void tick() {
this.whitelistButton.setMessage(Component.literal("WH").withStyle(this.theSettings.isWhitelist
? ChatFormatting.DARK_GREEN
@ -71,6 +91,12 @@ public class FilterSettingsGui {
this.modButton.setMessage(Component.literal("MO").withStyle(this.theSettings.respectMod
? ChatFormatting.DARK_GREEN
: ChatFormatting.RED));
this.damageButton.setMessage(Component.literal("DM").withStyle(this.theSettings.matchDamage
? ChatFormatting.DARK_GREEN
: ChatFormatting.RED));
this.nbtButton.setMessage(Component.literal("DA").withStyle(this.theSettings.matchNBT
? ChatFormatting.DARK_GREEN
: ChatFormatting.RED));
}
public void drawHover(GuiGraphics guiGraphics, int mouseX, int mouseY) {
@ -78,16 +104,22 @@ public class FilterSettingsGui {
List<Component> list = new ArrayList<>();
if (this.whitelistButton.isMouseOver(mouseX, mouseY)) {
list.add((this.theSettings.isWhitelist
? Component.translatable("info." + ActuallyAdditions.MODID + ".gui.whitelist")
: Component.translatable("info." + ActuallyAdditions.MODID + ".gui.blacklist")).withStyle(ChatFormatting.BOLD));
list.add(Component.translatable("info." + ActuallyAdditions.MODID + ".gui.whitelistInfo"));
? Component.translatable("info.actuallyadditions.gui.whitelist")
: Component.translatable("info.actuallyadditions.gui.blacklist")).withStyle(ChatFormatting.BOLD));
list.add(Component.translatable("info.actuallyadditions.gui.whitelistInfo"));
} else if (this.modButton.isMouseOver(mouseX, mouseY)) {
list.add((this.theSettings.respectMod
? Component.translatable("info." + ActuallyAdditions.MODID + ".gui.respectMod")
: Component.translatable("info." + ActuallyAdditions.MODID + ".gui.ignoreMod")).withStyle(ChatFormatting.BOLD));
list.add(Component.translatable("info." + ActuallyAdditions.MODID + ".gui.respectModInfo"));
? Component.translatable("info.actuallyadditions.gui.respectMod")
: Component.translatable("info.actuallyadditions.gui.ignoreMod")).withStyle(ChatFormatting.BOLD));
list.add(Component.translatable("info.actuallyadditions.gui.respectModInfo"));
} else if (this.modButton.isMouseOver(mouseX, mouseY)) {
list.add((this.theSettings.matchDamage
? Component.translatable("info.actuallyadditions.gui.respectDamage")
: Component.translatable("info.actuallyadditions.gui.ignoreDamage")).withStyle(ChatFormatting.BOLD));
} else if (this.modButton.isMouseOver(mouseX, mouseY)) {
list.add((this.theSettings.matchNBT
? Component.translatable("info.actuallyadditions.gui.respectNBT")
: Component.translatable("info.actuallyadditions.gui.ignoreNBT")).withStyle(ChatFormatting.BOLD));
}
//TODO tooltips still jank
if (!list.isEmpty()) {

View file

@ -25,15 +25,21 @@ public class FilterSettings {
public final ItemStackHandlerAA filterInventory;
public boolean isWhitelist;
public boolean respectMod;
public boolean matchDamage;
public boolean matchNBT;
private boolean lastWhitelist;
private boolean lastRespectMod;
private boolean lastMatchDamage;
private boolean lastMatchNBT;
public enum Buttons {
WHITELIST,
MOD
MOD,
DAMAGE,
NBT
}
public FilterSettings(int slots, boolean defaultWhitelist, boolean defaultRespectMod) {
public FilterSettings(int slots, boolean defaultWhitelist, boolean defaultRespectMod, boolean defaultMatchDamage, boolean defaultMatchNBT) {
this.filterInventory = new ItemStackHandlerAA(slots) {
@Override
protected void onContentsChanged(int slot) {
@ -44,11 +50,13 @@ public class FilterSettings {
this.isWhitelist = defaultWhitelist;
this.respectMod = defaultRespectMod;
this.matchDamage = defaultMatchDamage;
this.matchNBT = defaultMatchNBT;
}
public void onContentsChanged() {}
public static boolean check(ItemStack stack, ItemStackHandlerAA filter, boolean whitelist, boolean mod) {
public static boolean check(ItemStack stack, ItemStackHandlerAA filter, boolean whitelist, boolean mod, boolean damage, boolean nbt) {
if (!stack.isEmpty()) {
for (int i = 0; i < filter.getSlots(); i++) {
ItemStack slot = filter.getStackInSlot(i);
@ -59,7 +67,7 @@ public class FilterSettings {
DrillItem.loadSlotsFromNBT(inv, slot);
for (int k = 0; k < inv.getSlots(); k++) {
ItemStack filterSlot = inv.getStackInSlot(k);
if (!filterSlot.isEmpty() && areEqualEnough(filterSlot, stack, mod)) {
if (!filterSlot.isEmpty() && areEqualEnough(filterSlot, stack, mod, damage, nbt)) {
return whitelist;
}
}
@ -75,7 +83,7 @@ public class FilterSettings {
}
}
}
else if (areEqualEnough(slot, stack, mod)) {
else if (areEqualEnough(slot, stack, mod, damage, nbt)) {
return whitelist;
}
}
@ -84,20 +92,31 @@ public class FilterSettings {
return !whitelist;
}
private static boolean areEqualEnough(ItemStack first, ItemStack second, boolean mod) {
Item firstItem = first.getItem();
Item secondItem = second.getItem();
if (mod && BuiltInRegistries.ITEM.getKey(firstItem).getNamespace().equals(BuiltInRegistries.ITEM.getKey(secondItem).getNamespace())) {
return true;
}
private static boolean areEqualEnough(ItemStack first, ItemStack second, boolean mod, boolean damage, boolean nbt) {
if (mod)
return checkMod(first, second) && checkDamage(first, second, damage);
return firstItem == secondItem;
return checkItem(first, second, nbt) && checkDamage(first, second, damage);
}
public static boolean checkDamage(ItemStack first, ItemStack second, boolean damage) {
return !damage || first.getDamageValue() == second.getDamageValue();
}
public static boolean checkItem(ItemStack first, ItemStack second, boolean nbt) {
return nbt? ItemStack.isSameItemSameTags(first, second) : ItemStack.isSameItem(first, second);
}
public static boolean checkMod(ItemStack first, ItemStack second) {
return BuiltInRegistries.ITEM.getKey(first.getItem()).getNamespace().equals(BuiltInRegistries.ITEM.getKey(second.getItem()).getNamespace());
}
public void writeToNBT(CompoundTag tag, String name) {
CompoundTag compound = new CompoundTag();
compound.putBoolean("Whitelist", this.isWhitelist);
compound.putBoolean("Mod", this.respectMod);
compound.putBoolean("Damage", this.matchDamage);
compound.putBoolean("NBT", this.matchNBT);
compound.put("Items", filterInventory.serializeNBT());
tag.put(name, compound);
}
@ -106,16 +125,20 @@ public class FilterSettings {
CompoundTag compound = tag.getCompound(name);
this.isWhitelist = compound.getBoolean("Whitelist");
this.respectMod = compound.getBoolean("Mod");
this.matchDamage = compound.getBoolean("Damage");
this.matchNBT = compound.getBoolean("NBT");
this.filterInventory.deserializeNBT(compound.getCompound("Items"));
}
public boolean needsUpdateSend() {
return this.lastWhitelist != this.isWhitelist || this.lastRespectMod != this.respectMod;
return this.lastWhitelist != this.isWhitelist || this.lastRespectMod != this.respectMod || this.lastMatchDamage != this.matchDamage || this.lastMatchNBT != this.matchNBT;
}
public void updateLasts() {
this.lastWhitelist = this.isWhitelist;
this.lastRespectMod = this.respectMod;
this.lastMatchDamage = this.matchDamage;
this.lastMatchNBT = this.matchNBT;
}
public void onButtonPressed(int id) {
@ -123,11 +146,15 @@ public class FilterSettings {
this.isWhitelist = !this.isWhitelist;
} else if (id == Buttons.MOD.ordinal()) {
this.respectMod = !this.respectMod;
} else if (id == Buttons.DAMAGE.ordinal()) {
this.matchDamage = !this.matchDamage;
} else if (id == Buttons.NBT.ordinal()) {
this.matchNBT = !this.matchNBT;
}
}
public boolean check(ItemStack stack) {
return !this.needsCheck() || check(stack, this.filterInventory, this.isWhitelist, this.respectMod);
return !this.needsCheck() || check(stack, this.filterInventory, this.isWhitelist, this.respectMod, this.matchDamage, this.matchNBT);
}
public boolean needsCheck() {

View file

@ -35,8 +35,8 @@ import java.util.Optional;
public class TileEntityLaserRelayItemAdvanced extends TileEntityLaserRelayItem implements IButtonReactor, MenuProvider {
public FilterSettings leftFilter = new FilterSettings(12, true, false);
public FilterSettings rightFilter = new FilterSettings(12, true, false);
public FilterSettings leftFilter = new FilterSettings(12, true, false, false, false);
public FilterSettings rightFilter = new FilterSettings(12, true, false, false, false);
public TileEntityLaserRelayItemAdvanced(BlockPos pos, BlockState state) {
super(ActuallyBlocks.LASER_RELAY_ITEM_ADVANCED.getTileEntityType(), pos, state);
@ -118,7 +118,7 @@ public class TileEntityLaserRelayItemAdvanced extends TileEntityLaserRelayItem i
ItemStack copy = stack.copy();
copy.setCount(1);
if (!FilterSettings.check(copy, usedSettings.filterInventory, true, usedSettings.respectMod)) {
if (!FilterSettings.check(copy, usedSettings.filterInventory, true, usedSettings.respectMod, usedSettings.matchDamage, usedSettings.matchNBT)) {
for (int k = 0; k < usedSettings.filterInventory.getSlots(); k++) {
ItemStack slot = usedSettings.filterInventory.getStackInSlot(k);
if (!slot.isEmpty()) {

View file

@ -39,7 +39,7 @@ import java.util.List;
public class TileEntityRangedCollector extends TileEntityInventoryBase implements IButtonReactor, MenuProvider {
public static final int RANGE = 6;
public FilterSettings filter = new FilterSettings(12, true, false);
public FilterSettings filter = new FilterSettings(12, true, false, false, false);
public TileEntityRangedCollector(BlockPos pos, BlockState state) {
super(ActuallyBlocks.RANGED_COLLECTOR.getTileEntityType(), pos, state, 6);

View file

@ -109,16 +109,16 @@
"block.actuallyadditions.crusher": "Crusher",
"block.actuallyadditions.crusher_double": "Double Crusher",
"block.actuallyadditions.powered_furnace": "Powered Furnace",
"block.actuallyadditions.fishing_net": "Fishing Net (wip)",
"block.actuallyadditions.fishing_net": "Fishing Net (WIP)",
"block.actuallyadditions.heat_collector": "Heat Collector",
"block.actuallyadditions.item_repairer": "Item Repairer (wip)",
"block.actuallyadditions.item_repairer": "Item Repairer (WIP)",
"block.actuallyadditions.wood_casing": "Wood Casing",
"block.actuallyadditions.greenhouse_glass": "Greenhouse Glass",
"block.actuallyadditions.energizer": "Energizer",
"block.actuallyadditions.enervator": "Enervator",
"block.actuallyadditions.rice": "Rice Plant",
"block.actuallyadditions.coal_generator": "Coal Generator",
"block.actuallyadditions.lamp_controller": "Lamp Controller (wip)",
"block.actuallyadditions.lamp_controller": "Lamp Controller (WIP)",
"block.actuallyadditions.lamp_white": "White Lamp",
"block.actuallyadditions.lamp_orange": "Orange Lamp",
"block.actuallyadditions.lamp_magenta": "Magenta Lamp",
@ -155,7 +155,7 @@
"block.actuallyadditions.ethetic_green_slab": "Ethetic Green Quartz Slab",
"block.actuallyadditions.ethetic_white_slab": "Ethetic Quartz Slab",
"block.actuallyadditions.canola": "Canola Plant",
"block.actuallyadditions.treasure_chest": "Treasure Chest (wip)",
"block.actuallyadditions.treasure_chest": "Treasure Chest (WIP)",
"block.actuallyadditions.canola_press": "Canola Press",
"block.actuallyadditions.fermenting_barrel": "Fermenting Barrel",
"block.actuallyadditions.canola_oil": "Canola Oil",
@ -176,7 +176,7 @@
"block.actuallyadditions.laser_relay": "Energy Laser Relay",
"block.actuallyadditions.laser_relay_advanced": "Advanced Energy Laser Relay",
"block.actuallyadditions.laser_relay_extreme": "Extreme Energy Laser Relay",
"block.actuallyadditions.laser_relay_fluids": "Fluid Laser Relay (wip)",
"block.actuallyadditions.laser_relay_fluids": "Fluid Laser Relay (WIP)",
"block.actuallyadditions.iron_casing": "Iron Casing",
"block.actuallyadditions.black_lotus": "Black Lotus",
"block.actuallyadditions.ethetic_white_wall": "Ethetic Quartz Wall",
@ -210,16 +210,16 @@
"block.actuallyadditions.black_quartz_pillar_wall": "Black Quartz Pillar Wall",
"block.actuallyadditions.black_quartz_pillar_stair": "Black Quartz Pillar Stairs",
"block.actuallyadditions.black_quartz_pillar_slab": "Black Quartz Pillar Slab",
"block.actuallyadditions.laser_relay_item": "Item Laser Relay (wip)",
"block.actuallyadditions.laser_relay_item_advanced": "Advanced Item Laser Relay (wip)",
"block.actuallyadditions.item_interface": "Item Interface (wip)",
"block.actuallyadditions.hopping_item_interface": "Hopping Item Interface (wip)",
"block.actuallyadditions.booklet_stand": "Wall-Mount Manual (wip)",
"block.actuallyadditions.laser_relay_item": "Item Laser Relay (WIP)",
"block.actuallyadditions.laser_relay_item_advanced": "Advanced Item Laser Relay (WIP)",
"block.actuallyadditions.item_interface": "Item Interface (WIP)",
"block.actuallyadditions.hopping_item_interface": "Hopping Item Interface (WIP)",
"block.actuallyadditions.booklet_stand": "Wall-Mount Manual (WIP)",
"block.actuallyadditions.display_stand": "Display Stand",
"block.actuallyadditions.shock_suppressor": "Shock Absorber",
"block.actuallyadditions.tiny_torch": "Tiny Torch",
"block.actuallyadditions.empowerer": "Empowerer",
"block.actuallyadditions.distributor_item": "Item Distributor (wip)",
"block.actuallyadditions.distributor_item": "Item Distributor (WIP)",
"block.actuallyadditions.bio_reactor": "Bio Reactor",
"block.actuallyadditions.farmer": "Farmer",
"block.actuallyadditions.battery_box": "Battery Box",
@ -257,9 +257,9 @@
"block.actuallyadditions.atomic_reconstructor.info.2.12": "Replacer",
"block.actuallyadditions.atomic_reconstructor.info.2.13": "Differentiator",
"block.actuallyadditions.atomic_reconstructor.info.2.14": "Receiver",
"block.actuallyadditions.crate_small": "Small Storage Crate (wip)",
"block.actuallyadditions.crate_medium": "Medium Storage Crate (wip)",
"block.actuallyadditions.crate_large": "Large Storage Crate (wip)",
"block.actuallyadditions.crate_small": "Small Storage Crate (WIP)",
"block.actuallyadditions.crate_medium": "Medium Storage Crate (WIP)",
"block.actuallyadditions.crate_large": "Large Storage Crate (WIP)",
"_comment": "Items",
"item.actuallyadditions.drill_blue": "Blue Drill",
"item.actuallyadditions.drill_light_blue": "Light Blue Drill",
@ -288,13 +288,13 @@
"item.actuallyadditions.triple_battery": "Triple Battery",
"item.actuallyadditions.quadruple_battery": "Quadruple Battery",
"item.actuallyadditions.quintuple_battery": "Quintuple Battery",
"item.actuallyadditions.ring_of_growth": "Ring of Growth (wip)",
"item.actuallyadditions.ring_of_growth": "Ring of Growth (WIP)",
"item.actuallyadditions.ring_of_magnetizing": "Ring of Magnetizing",
"item.actuallyadditions.canola_oil_bucket": "Canola Oil Bucket",
"item.actuallyadditions.refined_canola_oil_bucket": "Refined Canola Oil Bucket",
"item.actuallyadditions.crystallized_oil_bucket": "Crystallized Oil Bucket",
"item.actuallyadditions.empowered_oil_bucket": "Empowered Oil Bucket",
"item.actuallyadditions.wings_of_the_bats": "Wings Of The Bats (wip)",
"item.actuallyadditions.wings_of_the_bats": "Wings Of The Bats (WIP)",
"item.actuallyadditions.bats_wing": "Bat's Wing",
"item.actuallyadditions.wooden_aiot": "Wooden AIOT",
"item.actuallyadditions.stone_aiot": "Stone AIOT",
@ -319,10 +319,10 @@
"item.actuallyadditions.drill_upgrade_block_placing": "Drill Block Placing Augment",
"item.actuallyadditions.drill_upgrade_three_by_three": "Drill Area Augment I",
"item.actuallyadditions.drill_upgrade_five_by_five": "Drill Area Augment II",
"item.actuallyadditions.dough": "Dough (wip)",
"item.actuallyadditions.dough": "Dough (WIP)",
"item.actuallyadditions.black_quartz": "Black Quartz",
"item.actuallyadditions.ring": "Ring",
"item.actuallyadditions.ring.storage": "Blaze Stored (wip)",
"item.actuallyadditions.ring.storage": "Blaze Stored (WIP)",
"item.actuallyadditions.teleport_staff": "Teleport Staff",
"item.actuallyadditions.leaf_blower": "Leaf Blower",
"item.actuallyadditions.advanced_leaf_blower": "Advanced Leaf Blower",
@ -330,17 +330,17 @@
"item.actuallyadditions.basic_coil": "Basic Coil",
"item.actuallyadditions.advanced_coil": "Advanced Coil",
"item.actuallyadditions.solidified_experience": "Solidified Experience",
"item.actuallyadditions.dust_iron": "Crushed Iron (wip)",
"item.actuallyadditions.dust_gold": "Crushed Gold (wip)",
"item.actuallyadditions.dust_diamond": "Crushed Diamond (wip)",
"item.actuallyadditions.dust_lapis": "Crushed Lapis (wip)",
"item.actuallyadditions.dust_emerald": "Crushed Emerald (wip)",
"item.actuallyadditions.dust_quartz": "Crushed Quartz (wip)",
"item.actuallyadditions.dust_coal": "Crushed Coal (wip)",
"item.actuallyadditions.dust_quartz_black": "Crushed Black Quartz (wip)",
"item.actuallyadditions.dust_iron": "Crushed Iron (WIP)",
"item.actuallyadditions.dust_gold": "Crushed Gold (WIP)",
"item.actuallyadditions.dust_diamond": "Crushed Diamond (WIP)",
"item.actuallyadditions.dust_lapis": "Crushed Lapis (WIP)",
"item.actuallyadditions.dust_emerald": "Crushed Emerald (WIP)",
"item.actuallyadditions.dust_quartz": "Crushed Quartz (WIP)",
"item.actuallyadditions.dust_coal": "Crushed Coal (WIP)",
"item.actuallyadditions.dust_quartz_black": "Crushed Black Quartz (WIP)",
"item.actuallyadditions.flax_seeds": "Flax Seeds",
"item.actuallyadditions.booklet": "Actually Additions Manual (wip)",
"item.actuallyadditions.rarmor_module_reconstructor": "Reconstruction Module (wip)",
"item.actuallyadditions.booklet": "Actually Additions Manual (WIP)",
"item.actuallyadditions.rarmor_module_reconstructor": "Reconstruction Module (WIP)",
"item.actuallyadditions.laser_wrench": "Laser Wrench",
"item.actuallyadditions.drill_core": "Drill Core",
"item.actuallyadditions.restonia_crystal": "Restonia Crystal",
@ -360,7 +360,7 @@
"item.actuallyadditions.lens_of_detonation": "Lens of Detonation",
"item.actuallyadditions.lens_of_certain_death": "Lens of Certain Death",
"item.actuallyadditions.lens_of_disenchanting": "Lens of Disenchanting",
"item.actuallyadditions.crate_keeper": "Storage Crate Keeper (wip)",
"item.actuallyadditions.crate_keeper": "Storage Crate Keeper (WIP)",
"item.actuallyadditions.paxel_crystal_red": "Restonia Crystal AIOT",
"item.actuallyadditions.paxel_crystal_blue": "Palis Crystal AIOT",
"item.actuallyadditions.paxel_crystal_light_blue": "Diamatine Crystal AIOT",
@ -368,11 +368,11 @@
"item.actuallyadditions.paxel_crystal_white": "Enori Crystal AIOT)",
"item.actuallyadditions.paxel_crystal_green": "Emeradic Crystal AIOT",
"item.actuallyadditions.ender_star": "Ender Star",
"item.actuallyadditions.minecart_firework_box": "Firework Box Cart (wip)",
"item.actuallyadditions.minecart_firework_box": "Firework Box Cart (WIP)",
"item.actuallyadditions.water_bowl": "Bowl of Water",
"item.actuallyadditions.filter": "Item Filter",
"item.actuallyadditions.biomass": "Biomass (wip)",
"item.actuallyadditions.biocoal": "Bio Coal (wip)",
"item.actuallyadditions.biomass": "Biomass (WIP)",
"item.actuallyadditions.biocoal": "Bio Coal (WIP)",
"item.actuallyadditions.player_probe": "Player Probe",
"item.actuallyadditions.worm": "Worm",
"item.actuallyadditions.travelers_sack": "Traveler's Sack",
@ -380,12 +380,12 @@
"item.actuallyadditions.crystallized_canola_seed": "Crystallized Canola Seed",
"item.actuallyadditions.empowered_canola_seed": "Empowered Canola Seed",
"item.actuallyadditions.lens_of_the_miner": "Lens of the Miner",
"item.actuallyadditions.lens_of_the_killer": "Lens of the Killer (wip)",
"item.actuallyadditions.lens_of_the_killer": "Lens of the Killer (WIP)",
"item.actuallyadditions.handheld_filler": "Handheld Filler",
"item.actuallyadditions.laser_upgrade_invisibility": "Laser Relay Modifier: Invisibility (wip)",
"item.actuallyadditions.laser_upgrade_invisibility": "Laser Relay Modifier: Invisibility (WIP)",
"item.actuallyadditions.engineers_goggles": "Engineer's Goggles",
"item.actuallyadditions.engineers_goggles_advanced": "Engineer's Infrared Goggles",
"item.actuallyadditions.laser_upgrade_range": "Laser Relay Modifier: Range (wip)",
"item.actuallyadditions.laser_upgrade_range": "Laser Relay Modifier: Range (WIP)",
"item.actuallyadditions.restonia_crystal_shard": "Red Crystal Shard",
"item.actuallyadditions.palis_crystal_shard": "Blue Crystal Shard",
"item.actuallyadditions.diamatine_crystal_shard": "Light Blue Crystal Shard",
@ -440,7 +440,7 @@
"tooltip.actuallyadditions.playerProbe.notice": "Look out! Someone tried to probe you and strap you to a Player Interface, but they failed!",
"tooltip.actuallyadditions.battery.discharge": "Charging other items in inventory",
"tooltip.actuallyadditions.battery.noDischarge": "Not charging other items in inventory",
"tooltip.actuallyadditions.battery.changeMode": "Sneak-right-click to toggle.",
"tooltip.actuallyadditions.battery.changeMode": "Sneak-right-click to toggle",
"tooltip.actuallyadditions.previouslyDoubleFurnace": "Previously \"Double Furnace\"",
"tooltip.actuallyadditions.previouslyBag": "Previously \"Bag\"",
"tooltip.actuallyadditions.previouslyVoidBag": "Previously \"Void Bag\"",
@ -463,21 +463,16 @@
"info.actuallyadditions.gui.all": "All",
"info.actuallyadditions.gui.put": "Put",
"info.actuallyadditions.gui.pull": "Pull",
"info.actuallyadditions.gui.whitelist": "Whitelist",
"info.actuallyadditions.gui.blacklist": "Blacklist",
"info.actuallyadditions.gui.whitelistInfo": "To let all items through, an empty blacklist can be used, to let no items through, an empty whitelist can be used. To configure certain items, place them or configured Item Filters in the slots.",
"info.actuallyadditions.gui.respectMeta": "Respecting Metadata",
"info.actuallyadditions.gui.ignoreMeta": "Ignoring Metadata",
"info.actuallyadditions.gui.respectNBT": "Respecting NBT",
"info.actuallyadditions.gui.ignoreNBT": "Ignoring NBT",
"info.actuallyadditions.gui.whitelist": "Allowlist",
"info.actuallyadditions.gui.blacklist": "Blocklist",
"info.actuallyadditions.gui.whitelistInfo": "To let all items through, an empty blocklist can be used, to let no items through, an empty allowlist can be used. To configure certain items, place them or configured Item Filters in the slots.",
"info.actuallyadditions.gui.respectDamage": "Respecting Damage",
"info.actuallyadditions.gui.ignoreDamage": "Ignoring Damage",
"info.actuallyadditions.gui.respectNBT": "Respecting NBT Data",
"info.actuallyadditions.gui.ignoreNBT": "Ignoring NBT Data",
"info.actuallyadditions.gui.ignoreMod": "Mod Mode Off",
"info.actuallyadditions.gui.respectMod": "Mod Mode On",
"info.actuallyadditions.gui.respectModInfo": "If this is enabled, the filter will compare the mods items come from §cinstead of comparing the items themselves§r. This can be useful for storage systems with mod-based chests. Can also be combined with the other options, but that normally isn't very useful.",
"info.actuallyadditions.gui.ignoreOredict": "Ignoring OreDictionary",
"info.actuallyadditions.gui.respectOredictSoft": "Soft Respecting OreDictionary",
"info.actuallyadditions.gui.respectOredictHard": "Hard Respecting OreDictionary",
"info.actuallyadditions.gui.respectOredictInfo.one": "The item being passed only has to contain §2only one§r of the OreDictionary tags of the item in the filter.",
"info.actuallyadditions.gui.respectOredictInfo.all": "The item being passed has to contain §2all§r of the OreDictionary tags of the item in the filter.",
"info.actuallyadditions.gui.respectModInfo": "If this is enabled, the filter will compare the mods items come from §cinstead of comparing the items themselves§r. This can be useful for storage systems with mod-based chests. Can be combined with damage matching, but that normally isn't very useful.",
"info.actuallyadditions.gui.autosplititems.on": "Auto-Split Items On",
"info.actuallyadditions.gui.autosplititems.off": "Auto-Split Items Off",
"info.actuallyadditions.gui.inbound": "INBOUND",
@ -486,8 +481,8 @@
"info.actuallyadditions.gui.coffee_amount": "%d/%d Coffee",
"info.actuallyadditions.gui.ok": "Ok",
"info.actuallyadditions.gui.the": "the",
"info.actuallyadditions.gui.smart": "Smart Whitelist",
"info.actuallyadditions.gui.smartInfo": "When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blacklist. Adding Item Filters to the list before will cause them to also be filled.",
"info.actuallyadditions.gui.smart": "Smart Allowlist",
"info.actuallyadditions.gui.smartInfo": "When pressing this, all items from inventories adjacent to this relay will be added to this part of the white- or blocklist. Adding Item Filters to the list before will cause them to also be filled.",
"info.actuallyadditions.inputter.info.1": "This is the first Slot in the connected Inventory to <p> at.",
"info.actuallyadditions.inputter.info.2": "This is the slot after the last Slot in the connected Inventory to <p> at. What that means: If you, for example, write 2 in the field to the left and 5 in this one, it will <p> at Slot 2, 3, and 4.",
"info.actuallyadditions.nolens": "No Lens",
@ -831,7 +826,7 @@
"booklet.actuallyadditions.chapter.dropper": "Automatic Precision Dropper",
"booklet.actuallyadditions.chapter.dropper.text.1": "The <item>Automatic Precision Dropper<r> works much like a normal dropper, but it will drop items <imp>without needing a Redstone Signal<r>. <n>It also won't spit them out all over the ground, but it will <imp>drop them straight into the direction you point it at<r>! <n>When right-clicking it with a <item>Redstone Torch<r> in hand, it will change between a mode where it <imp>gets deactivated by Redstone<r> and a mode where it <imp>responds to pulses<r>.",
"booklet.actuallyadditions.chapter.rangedCollector": "Ranged Collector",
"booklet.actuallyadditions.chapter.rangedCollector.text.1": "The <item>Ranged Collector<r> works much like a hopper, in that it <imp>collects items around it<r>, having the power, however, to pick up items that are in an area of <imp><range> blocks<r> around it. <n>It has a <imp>filter<r> that can be set to <imp>white- or blacklist<r>. <n>This comes with a disadvantage, however: It doesn't auto-output its items.",
"booklet.actuallyadditions.chapter.rangedCollector.text.1": "The <item>Ranged Collector<r> works much like a hopper, in that it <imp>collects items around it<r>, having the power, however, to pick up items that are in an area of <imp><range> blocks<r> around it. <n>It has a <imp>filter<r> that can be set to <imp>white- or blocklist<r>. <n>This comes with a disadvantage, however: It doesn't auto-output its items.",
"booklet.actuallyadditions.chapter.hairBalls": "Ball of Fur-s",
"booklet.actuallyadditions.chapter.hairBalls.text.1": "<item>Balls of Fur<r> dropped by <imp>live<r> cats. <n>More information on the next page.",
"booklet.actuallyadditions.chapter.hairBalls.text.2": "<item>Balls of Fur<r> are an item rarely dropped by <imp>cats<r> which have been <imp>tamed<r> by the player. <n>Cats are very mysterious creatures as they <imp>appear to get everything stuck in their fur<r>. <item>Balls of Fur<r> may seem disgusting at first, but when removing all of the hair by <imp>right-clicking<r>, they will reveal some <imp>valuable items<r>. <n>Or just some String. <n><n><n><i>FUURRRRRR!!",
@ -849,7 +844,7 @@
"booklet.actuallyadditions.chapter.crystals.text.1": "The <item>Atomic Reconstructor<r> is used to craft <item>Crystals<r>, which are the main crafting ingredient in most items from <imp>Actually Additions<r>. <n>Upon being supplied with power, it shoots out a Laser. <tifisgrin>When the Laser hits a block<r>, it will convert all surrounding items and blocks, provided they can be converted.",
"booklet.actuallyadditions.chapter.crystals.text.2": "When shooting a laser, it uses <imp>1000 CF<r>, but additional rates vary depending on the conversion. <n>There are various <item>Lenses<r> that can be attached to the Reconstructor that don't all follow the default behavior of the Reconstructor and are able to do some neat things. <n>See the <imp>Reconstruction section<r> in the booklet <imp>for more information<r>.",
"booklet.actuallyadditions.chapter.crystals.text.3": "When right-clicking the Reconstructor with a <item>Redstone Torch<r> in hand, it will change between a mode where it <imp>gets deactivated by Redstone<r> and a mode where it <imp>responds to pulses<r>. It should be noted that any recipes listed without information about Lenses <imp>don't use one<r>. <n><i>I thought that was obvious.",
"booklet.actuallyadditions.chapter.crystals.text.5": "When you have crafted a couple of items, you might want to find a way to <imp>automate this<r>. <n>There is a very simple way to do accomplish this: <n>Place the <item>Atomic Reconstructor<r> down facing into a <item>Precision Dropper<r> (to find it, look it up in the <imp>All Items<r> Entry!). <n>Next, place a <item>Ranged Collector<r> in the area that has the converted items set as a whitelist. <n>Now you can just chuck your raw materials into the Dropper to convert them!",
"booklet.actuallyadditions.chapter.crystals.text.5": "When you have crafted a couple of items, you might want to find a way to <imp>automate this<r>. <n>There is a very simple way to do accomplish this: <n>Place the <item>Atomic Reconstructor<r> down facing into a <item>Precision Dropper<r> (to find it, look it up in the <imp>All Items<r> Entry!). <n>Next, place a <item>Ranged Collector<r> in the area that has the converted items set as a allowlist. <n>Now you can just chuck your raw materials into the Dropper to convert them!",
"booklet.actuallyadditions.chapter.crystals.text.6": "<n><n><n><i>Molecular Transformilator",
"booklet.actuallyadditions.chapter.book_tutorial": "Intro to the Manual",
"booklet.actuallyadditions.chapter.book_tutorial.text.1": "The <item>Actually Additions Manual<r>, the book you are looking at right now, contains a variety of <imp>useful information about all of the items<r>. <n>Once you get the hang of it, it is very easy to navigate. Here is a quick rundown: <n><n>While you are in a <item>chapter<r>, like this one, you can use the <imp>white buttons at the bottom<r> to turn the page back or forwards. This can also be done by <imp>using the scroll wheel<r>. <n>Chapters, however, aren't the only thing that this book consists of.",
@ -895,7 +890,7 @@
"booklet.actuallyadditions.chapter.itemInterfaces.text.1": "The <item>Item Interface<r> is the way to <imp>interact<r> with an <item>Item Laser Relay<r> network. On its own, such a network will just <imp>\"know about\"<r> all of the <imp>items and slots<r> that connected containers have. <n>The <item>Item Interface<r>, however, can be used to directly <imp>interact<r> with these items. The way the <item>Item Interface<r> works is that it basically <imp>pretends<r> to be a <imp>very large chest<r> containing <imp>every slot<r> of every container that is connected.",
"booklet.actuallyadditions.chapter.itemInterfaces.text.2": "What this means is that you can <imp>use a Hopper<r> or any other item transport mechanic on the Item Interface and it will function like a chest, being able to <imp>accept items<r> and have items <imp>pulled out of it<r>. But instead of any items being stored inside of the <item>Item Interface<r> they will go to and be pulled from <imp>the Laser Relay network<r>. <n><n>To actually <imp>connect<r> an <item>Item Interface<r> to a network, just <imp>place<r> an <item>Item Laser Relay<r> next to one.",
"booklet.actuallyadditions.chapter.itemRelaysAdvanced": "Advanced Item Laser Relays",
"booklet.actuallyadditions.chapter.itemRelaysAdvanced.text.1": "Soon you will find that sometimes you will need to <imp>white- and blacklist<r> what you actaully want to go into a container. <n>The <item>Advanced Item Laser Relay<r> is able to do just that. When <imp>right-clicking<r>, you can configure a <imp>Whitelist<r> or <imp>Blacklist<r> inside of the GUI. <n>This list has two sides, however. The <imp>INBOUND<r> side basically means \"things that are trying to go into the container the Relay is attached to\", while <imp>OUTBOUND<r> means \"things that are trying to exit the attached container\".",
"booklet.actuallyadditions.chapter.itemRelaysAdvanced.text.1": "Soon you will find that sometimes you will need to <imp>white- and blocklist<r> what you actaully want to go into a container. <n>The <item>Advanced Item Laser Relay<r> is able to do just that. When <imp>right-clicking<r>, you can configure a <imp>Allowlist<r> or <imp>Blocklist<r> inside of the GUI. <n>This list has two sides, however. The <imp>INBOUND<r> side basically means \"things that are trying to go into the container the Relay is attached to\", while <imp>OUTBOUND<r> means \"things that are trying to exit the attached container\".",
"booklet.actuallyadditions.chapter.itemRelaysAdvanced.text.2": "This doesn't only work on <imp>storage containers<r> in the network, but also for <item>Item Interfaces<r>, meaning that you are able to set up a storage system and only pull out specific items in certain places.",
"booklet.actuallyadditions.chapter.itemInterfacesHopping": "Hopping Item Interface",
"booklet.actuallyadditions.chapter.itemInterfacesHopping.text.1": "The <item>Hopping Item Interface<r> works the same as a normal <item>Item Interface<r>, meaning that you can <imp>connect<r> them to an <item>Item Laser Relay<r> network by placing one <imp>next to it<r>. <n>However, whereas you need to pipe items into the normal <item>Item Interface<r>, the <item>Hopping Item Interface<r> will <imp>pull and push<r> items <imp>on its own<r>. It has <imp>every functionality<r> that the <item>Hopper<r> has, but instead of storing items in an <imp>internal inventory<r>, it stores them in <imp>the network<r>.",
@ -911,7 +906,7 @@
"booklet.actuallyadditions.chapter.displayStand.text.1": "The <item>Display Stand<r> is a block that can, for one, <imp>display any item or block<r> by right-clicking with it onto the display stand. It will then be floating around on top. <n>To take it out of there again, just right-click with an empty hand. <n><n>The other feature, however, is that some items can be put onto it, <imp>having special effects<r>. This, however, will require the stand to <imp>get CF<r>. Read more on the next page.",
"booklet.actuallyadditions.chapter.displayStand.text.2": "The <item>Leaf Blower<r> and <item>Advanced Leaf Blower<r> can be placed onto the display stand, resulting in the grass and leaves around it to be blown away. <n><n><item>Potion Rings<r> can be placed onto the display stand. The normal version will give the specified potion effect to <imp>only one<r> living entity in a small area, while the advanced version will <imp>give a potion effect to all living entities<r> in a <imp>big area<r> while using up a significant amount of <imp>CF<r>.",
"booklet.actuallyadditions.chapter.itemFilter": "Item Filter",
"booklet.actuallyadditions.chapter.itemFilter.text.1": "The <item>Item Filter<r> can be used in <item>Advanced Item Laser Relays<r>, <item>ESDs<r> and <item>Ranged Collectors<r> to <imp>enlargen the size of their whitelist<r>. This can be done by right-clicking with the filter in hand and placing items to be filtered inside of it. The filter can then be placed into any whitelist slot in the desired machine. <n>For more information on this, <imp>hover over the whitelist buttons in the GUIs of whitelistable machines<r>!",
"booklet.actuallyadditions.chapter.itemFilter.text.1": "The <item>Item Filter<r> can be used in <item>Advanced Item Laser Relays<r>, <item>ESDs<r> and <item>Ranged Collectors<r> to <imp>enlargen the size of their whitelist<r>. This can be done by right-clicking with the filter in hand and placing items to be filtered inside of it. The filter can then be placed into any allowlist slot in the desired machine. <n>For more information on this, <imp>hover over the allowlist buttons in the GUIs of allowlistable machines<r>!",
"booklet.actuallyadditions.chapter.video_guide": "A Video Guide",
"booklet.actuallyadditions.chapter.video_guide.booty.text.1": "If you want to have a <imp>visual introduction<r> to see what <item>Actually Additions<r> has to offer, you can watch this really awesome video by a friend of mine, <item>Booty Toast<r> (yes, weird name, I know).",
"booklet.actuallyadditions.chapter.video_guide.booty.text.2": "<n>His video covers most of the main stuff the mod has to offer, however it is <imp>a bit outdated<r> and doesn't cover everything. It's still a <imp>great introduction to the mod<r> though.",