Some sack fixes, other misc things.

This commit is contained in:
Flanks255 2023-12-20 15:02:25 -06:00
parent 457cf00a7b
commit 3edef49c04
11 changed files with 67 additions and 90 deletions

View file

@ -4,12 +4,21 @@ import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import net.minecraft.item.Item;
import net.minecraft.tags.ITag;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.ResourceLocation;
public final class ActuallyTags {
public static final void init() {
// lol
Items.touch();
}
public static class Items {
public static void touch() {
// load the stupid tags
}
public static final ITag.INamedTag<Item> DRILLS = tag("drills");
public static final ITag.INamedTag<Item> COFFEE_BEANS = tag("coffee_beans");
public static final ITag.INamedTag<Item> TINY_COALS = tag("tiny_coals");
public static final ITag.INamedTag<Item> HOLDS_ITEMS = ItemTags.createOptional(new ResourceLocation("forge", "holds_items"));
public static final ITag.INamedTag<Item> CRYSTALS = tag("crystals");
private static ITag.INamedTag<Item> tag(String name) {

View file

@ -11,6 +11,7 @@
package de.ellpeck.actuallyadditions.mod;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.ActuallyTags;
import de.ellpeck.actuallyadditions.api.farmer.IFarmerBehavior;
import de.ellpeck.actuallyadditions.mod.blocks.ActuallyBlocks;
import de.ellpeck.actuallyadditions.mod.config.CommonConfig;
@ -26,7 +27,7 @@ import de.ellpeck.actuallyadditions.mod.fluids.InitFluids;
import de.ellpeck.actuallyadditions.mod.inventory.ActuallyContainers;
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
import de.ellpeck.actuallyadditions.mod.items.ItemCoffee;
import de.ellpeck.actuallyadditions.mod.items.ItemWorm;
import de.ellpeck.actuallyadditions.mod.items.Worm;
import de.ellpeck.actuallyadditions.mod.misc.BannerHelper;
import de.ellpeck.actuallyadditions.mod.misc.DungeonLoot;
import de.ellpeck.actuallyadditions.mod.misc.apiimpl.LaserRelayConnectionHandler;
@ -103,13 +104,14 @@ public class ActuallyAdditions {
ENTITIES.register(eventBus);
eventBus.addListener(this::onConfigReload);
ActuallyParticles.init(eventBus);
ActuallyTags.init();
MinecraftForge.EVENT_BUS.addListener(this::serverStarted);
MinecraftForge.EVENT_BUS.addListener(this::serverStopped);
MinecraftForge.EVENT_BUS.register(new CommonEvents());
MinecraftForge.EVENT_BUS.register(new DungeonLoot());
MinecraftForge.EVENT_BUS.addListener(ActuallyAdditions::reloadEvent);
MinecraftForge.EVENT_BUS.addListener(ItemWorm::onHoe);
MinecraftForge.EVENT_BUS.addListener(Worm::onHoe);
InitFluids.init(eventBus);
eventBus.addListener(this::setup);

View file

@ -19,7 +19,9 @@ import de.ellpeck.actuallyadditions.mod.inventory.ActuallyContainers;
import de.ellpeck.actuallyadditions.mod.inventory.gui.*;
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
import de.ellpeck.actuallyadditions.mod.misc.special.SpecialRenderInit;
import de.ellpeck.actuallyadditions.mod.particle.*;
import de.ellpeck.actuallyadditions.mod.particle.ActuallyParticles;
import de.ellpeck.actuallyadditions.mod.particle.ParticleBeam;
import de.ellpeck.actuallyadditions.mod.particle.ParticleLaserItem;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScreenManager;
import net.minecraft.client.network.play.ClientPlayNetHandler;
@ -38,7 +40,7 @@ import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
public class ActuallyAdditionsClient {
public static void setup(FMLClientSetupEvent event) {
ScreenManager.register(ActuallyContainers.BAG_CONTAINER.get(), GuiBag::new);
ScreenManager.register(ActuallyContainers.BAG_CONTAINER.get(), SackGui::new);
ScreenManager.register(ActuallyContainers.BIO_REACTOR_CONTAINER.get(), GuiBioReactor::new);
ScreenManager.register(ActuallyContainers.BREAKER_CONTAINER.get(), GuiBreaker::new);
ScreenManager.register(ActuallyContainers.CANOLA_PRESS_CONTAINER.get(), GuiCanolaPress::new);

View file

@ -14,11 +14,6 @@ import de.ellpeck.actuallyadditions.mod.config.ConfigCategories;
public enum ConfigStringListValues {
CONFIGURE_ITEMS(
"Configuration Items",
ConfigCategories.OTHER,
new String[] { "minecraft:redstone_torch", "minecraft:compass" },
"The non-Actually Additions items that are used to configure blocks from the mod. The first one is the Redstone Torch used to configure the Redstone Mode, and the second one is the Compass used to configure Laser Relays. If another mod overrides usage of either one of these items, you can change the registry name of the used items (using blocks is not possible) here."),
CRUSHER_RECIPE_EXCEPTIONS(
"Crusher Recipe Exceptions",
ConfigCategories.OTHER,
@ -70,11 +65,6 @@ public enum ConfigStringListValues {
ConfigCategories.OTHER,
new String[] { "minecraft:villager_golem" },
"By default, the Spawner Changer allows every living entity to be put into a spawner. If there is one that shouldn't be able to, put its MAPPING NAME here."),
SACK_BLACKLIST(
"Sack Blacklist",
ConfigCategories.OTHER,
new String[0],
"The items that aren't allowed to be put in the Traveller's Sack. Use REGISTRY NAMES, and if metadata is needed, add it like so: somemod:some_block@3"),
REPAIR_BLACKLIST(
"Repair Blacklist",
ConfigCategories.OTHER,

View file

@ -17,7 +17,7 @@ import de.ellpeck.actuallyadditions.mod.data.PlayerData;
import de.ellpeck.actuallyadditions.mod.data.WorldData;
import de.ellpeck.actuallyadditions.mod.items.ActuallyItems;
import de.ellpeck.actuallyadditions.mod.items.DrillItem;
import de.ellpeck.actuallyadditions.mod.items.ItemBag;
import de.ellpeck.actuallyadditions.mod.items.Sack;
import de.ellpeck.actuallyadditions.mod.network.PacketHandlerHelper;
import de.ellpeck.actuallyadditions.mod.tile.FilterSettings;
import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA;
@ -66,11 +66,11 @@ public class CommonEvents {
if (i != player.inventory.selected) {
ItemStack invStack = player.inventory.getItem(i);
if (StackUtil.isValid(invStack) && invStack.getItem() instanceof ItemBag && invStack.hasTag()) {
if (StackUtil.isValid(invStack) && invStack.getItem() instanceof Sack && invStack.hasTag()) {
if (invStack.getOrCreateTag().getBoolean("AutoInsert")) {
boolean changed = false;
boolean isVoid = ((ItemBag) invStack.getItem()).isVoid;
boolean isVoid = ((Sack) invStack.getItem()).isVoid;
ItemStackHandlerAA inv = new ItemStackHandlerAA(28); //TODO whats going on here
DrillItem.loadSlotsFromNBT(inv, invStack);

View file

@ -10,7 +10,7 @@ import net.minecraftforge.registries.ForgeRegistries;
public class ActuallyContainers {
public static final DeferredRegister<ContainerType<?>> CONTAINERS = DeferredRegister.create(ForgeRegistries.CONTAINERS, ActuallyAdditions.MODID);
public static final RegistryObject<ContainerType<ContainerBag>> BAG_CONTAINER = CONTAINERS.register("bag_container", () -> IForgeContainerType.create(ContainerBag::fromNetwork));
public static final RegistryObject<ContainerType<SackContainer>> BAG_CONTAINER = CONTAINERS.register("bag_container", () -> IForgeContainerType.create(SackContainer::fromNetwork));
public static final RegistryObject<ContainerType<ContainerBioReactor>> BIO_REACTOR_CONTAINER = CONTAINERS.register("bioreactor_container", () -> IForgeContainerType.create(ContainerBioReactor::fromNetwork));
public static final RegistryObject<ContainerType<ContainerBreaker>> BREAKER_CONTAINER = CONTAINERS.register("breaker_container", () -> IForgeContainerType.create(ContainerBreaker::fromNetwork));
public static final RegistryObject<ContainerType<ContainerCanolaPress>> CANOLA_PRESS_CONTAINER = CONTAINERS.register("canola_press_container", () -> IForgeContainerType.create(ContainerCanolaPress::fromNetwork));

View file

@ -10,12 +10,12 @@
package de.ellpeck.actuallyadditions.mod.inventory;
import de.ellpeck.actuallyadditions.api.ActuallyTags;
import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotDeletion;
import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter;
import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotImmovable;
import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotItemHandlerUnconditioned;
import de.ellpeck.actuallyadditions.mod.items.DrillItem;
import de.ellpeck.actuallyadditions.mod.items.ItemBag;
import de.ellpeck.actuallyadditions.mod.items.Sack;
import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor;
import de.ellpeck.actuallyadditions.mod.tile.FilterSettings;
import de.ellpeck.actuallyadditions.mod.util.ItemStackHandlerAA;
@ -24,19 +24,16 @@ import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.container.ClickType;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.PacketBuffer;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
import java.util.UUID;
public class ContainerBag extends Container implements IButtonReactor {
public class SackContainer extends Container implements IButtonReactor {
public final FilterSettings filter = new FilterSettings(4, false, false, false);
private final ItemStackHandlerAA bagInventory;
@ -46,45 +43,49 @@ public class ContainerBag extends Container implements IButtonReactor {
public static final int SIZE = 28;
public static ContainerBag fromNetwork(int windowId, PlayerInventory inv, PacketBuffer data) {
return new ContainerBag(windowId, inv, data.readUUID(), new ItemStackHandlerAA(28));
public static SackContainer fromNetwork(int windowId, PlayerInventory inv, PacketBuffer data) {
return new SackContainer(windowId, inv, data.readUUID(), new ItemStackHandlerAA(28));
}
public ContainerBag(int windowId, PlayerInventory playerInventory, UUID uuid, ItemStackHandlerAA handler) {
public SackContainer(int windowId, PlayerInventory playerInventory, UUID uuid, ItemStackHandlerAA handler) {
super(ActuallyContainers.BAG_CONTAINER.get(), windowId);
this.inventory = playerInventory;
this.bagInventory = handler; //new ItemStackHandlerAA(SIZE, (slot, stack, automation) -> !isBlacklisted(stack), ItemStackHandlerAA.REMOVE_TRUE);
this.bagInventory = handler;
for (int i = 0; i < 4; i++) {
this.addSlot(new SlotFilter(this.filter, i, 155, 10 + i * 18));
for (int row = 0; row < 4; row++) {
this.addSlot(new SlotFilter(this.filter, row, 155, 10 + row * 18));
}
if (false) { // isvoid, move to its own container
if (false) { // TODO isvoid, move to its own container
this.addSlot(new SlotDeletion(this.bagInventory, 0, 64, 65) {
@Override
public boolean mayPlace(ItemStack stack) {
return ContainerBag.this.filter.check(stack);
return SackContainer.this.filter.check(stack);
}
});
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 7; j++) {
this.addSlot(new SlotItemHandlerUnconditioned(this.bagInventory, j + i * 7, 10 + j * 18, 10 + i * 18) {
// Sack inventory
for (int row = 0; row < 4; row++) {
for (int col = 0; col < 7; col++) {
this.addSlot(new SlotItemHandlerUnconditioned(this.bagInventory, col + row * 7, 10 + col * 18, 10 + row * 18) {
@Override
public boolean mayPlace(ItemStack stack) {
return !isBlacklisted(stack) && ContainerBag.this.filter.check(stack);
return !stack.getItem().is(ActuallyTags.Items.HOLDS_ITEMS) && SackContainer.this.filter.check(stack);
}
});
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
this.addSlot(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 94 + i * 18));
// Player Inventory
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 9; col++) {
this.addSlot(new Slot(playerInventory, col + row * 9 + 9, 8 + col * 18, 94 + row * 18));
}
}
// Player Hotbar
for (int i = 0; i < 9; i++) {
if (i == playerInventory.selected) {
this.addSlot(new SlotImmovable(playerInventory, i, 8 + i * 18, 152));
@ -94,8 +95,8 @@ public class ContainerBag extends Container implements IButtonReactor {
}
ItemStack stack = playerInventory.getSelected();
if (!stack.isEmpty() && stack.getItem() instanceof ItemBag) {
DrillItem.loadSlotsFromNBT(this.bagInventory, playerInventory.getSelected());
if (!stack.isEmpty() && stack.getItem() instanceof Sack) {
//DrillItem.loadSlotsFromNBT(this.bagInventory, playerInventory.getSelected());
if (stack.hasTag()) {
CompoundNBT compound = stack.getOrCreateTag();
this.filter.readFromNBT(compound, "Filter");
@ -105,7 +106,7 @@ public class ContainerBag extends Container implements IButtonReactor {
}
@Override
public void broadcastChanges() {
public void broadcastChanges() { // TODO is this needed anymore?
super.broadcastChanges();
if (this.filter.needsUpdateSend() || this.autoInsert != this.oldAutoInsert) {
@ -149,7 +150,7 @@ public class ContainerBag extends Container implements IButtonReactor {
}
@Override
public ItemStack quickMoveStack(PlayerEntity player, int slot) {
public ItemStack quickMoveStack(@Nonnull PlayerEntity player, int slot) {
int inventoryStart = this.bagInventory.getSlots() + 4;
int inventoryEnd = inventoryStart + 26;
int hotbarStart = inventoryEnd + 1;
@ -165,7 +166,7 @@ public class ContainerBag extends Container implements IButtonReactor {
if (slot >= inventoryStart) {
//Shift from Inventory
if (!this.filter.check(newStack) || !this.moveItemStackTo(newStack, 4, 32, false)) {
if (slot >= inventoryStart && slot <= inventoryEnd) {
if (slot <= inventoryEnd) {
if (!this.moveItemStackTo(newStack, hotbarStart, hotbarEnd + 1, false)) {
return ItemStack.EMPTY;
}
@ -209,8 +210,8 @@ public class ContainerBag extends Container implements IButtonReactor {
@Override
public void removed(PlayerEntity player) {
ItemStack stack = this.inventory.getSelected();
if (!stack.isEmpty() && stack.getItem() instanceof ItemBag) {
DrillItem.writeSlotsToNBT(this.bagInventory, this.inventory.getSelected());
if (!stack.isEmpty() && stack.getItem() instanceof Sack) {
//DrillItem.writeSlotsToNBT(this.bagInventory, this.inventory.getSelected());
CompoundNBT compound = stack.getOrCreateTag();
this.filter.writeToNBT(compound, "Filter");
compound.putBoolean("AutoInsert", this.autoInsert);
@ -220,7 +221,7 @@ public class ContainerBag extends Container implements IButtonReactor {
@Override
public boolean stillValid(PlayerEntity player) {
return true; //!this.sack.isEmpty() && player.getMainHandItem() == this.sack; //TODO fix later
return true;
}
@Override
@ -231,31 +232,4 @@ public class ContainerBag extends Container implements IButtonReactor {
//this.filter.onButtonPressed(buttonID); //TODO
}
}
private static final List<Pair<Item, Integer>> BLACKLIST = new ArrayList<>();
private static boolean runOnce = false;
// TODO: [port] FIX THIS
public static boolean isBlacklisted(ItemStack stack) {
//TODO replace with modern tagging blocking etc
return false;
/* if (!runOnce) {
runOnce = true;
for (String s : ConfigStringListValues.SACK_BLACKLIST.getValue()) {
String[] split = s.split("@");
Item item = ForgeRegistries.ITEMS.getValue(new ResourceLocation(split[0]));
if (item == null) {
ActuallyAdditions.LOGGER.error("Invalid item in sack blacklist: " + s);
continue;
}
if (split.length == 1) {
BLACKLIST.add(Pair.of(item, 0));
} else if (split.length == 2) {
BLACKLIST.add(Pair.of(item, Integer.parseInt(split[1])));
}
}
}
return BLACKLIST.contains(Pair.of(stack.getItem(), 0));*/
}
}

View file

@ -12,7 +12,7 @@ package de.ellpeck.actuallyadditions.mod.inventory.gui;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.systems.RenderSystem;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerBag;
import de.ellpeck.actuallyadditions.mod.inventory.SackContainer;
import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.entity.player.PlayerInventory;
@ -21,16 +21,16 @@ import net.minecraft.util.text.ITextComponent;
import javax.annotation.Nonnull;
public class GuiBag extends AAScreen<ContainerBag> {
public class SackGui extends AAScreen<SackContainer> {
private static final ResourceLocation RES_LOC = AssetUtil.getGuiLocation("gui_bag");
private static final ResourceLocation RES_LOC_VOID = AssetUtil.getGuiLocation("gui_void_bag");
private final ContainerBag container;
private final SackContainer container;
private final boolean isVoid;
private FilterSettingsGui filter;
private Button buttonAutoInsert;
public GuiBag(ContainerBag container, PlayerInventory inventory, ITextComponent title) {
public SackGui(SackContainer container, PlayerInventory inventory, ITextComponent title) {
super(container, inventory, title);
this.imageWidth = 176;
this.imageHeight = 90 + 86;

View file

@ -99,9 +99,9 @@ public final class ActuallyItems {
public static final RegistryObject<Item> LASER_UPGRADE_RANGE = ITEMS.register("laser_upgrade_range", ItemLaserRelayUpgrade::new);
public static final RegistryObject<Item> LASER_UPGRADE_INVISIBILITY = ITEMS.register("laser_upgrade_invisibility", ItemLaserRelayUpgrade::new);
public static final Supplier<Item> HANDHELD_FILLER = ITEMS.register("handheld_filler", ItemFillingWand::new);
public static final RegistryObject<Item> TRAVELERS_SACK = ITEMS.register("travelers_sack", () -> new ItemBag(false));
public static final RegistryObject<Item> VOID_SACK = ITEMS.register("void_sack", () -> new ItemBag(true));
public static final RegistryObject<Item> WORM = ITEMS.register("worm", ItemWorm::new);
public static final RegistryObject<Item> TRAVELERS_SACK = ITEMS.register("travelers_sack", () -> new Sack(false));
public static final RegistryObject<Item> VOID_SACK = ITEMS.register("void_sack", () -> new Sack(true));
public static final RegistryObject<Item> WORM = ITEMS.register("worm", Worm::new);
public static final RegistryObject<Item> PLAYER_PROBE = ITEMS.register("player_probe", ItemPlayerProbe::new);
public static final RegistryObject<Item> FILTER = ITEMS.register("filter", ItemFilter::new);
public static final RegistryObject<Item> WATER_BOWL = ITEMS.register("water_bowl", ItemWaterBowl::new);

View file

@ -10,7 +10,7 @@
package de.ellpeck.actuallyadditions.mod.items;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerBag;
import de.ellpeck.actuallyadditions.mod.inventory.SackContainer;
import de.ellpeck.actuallyadditions.mod.items.base.ItemBase;
import de.ellpeck.actuallyadditions.mod.sack.SackData;
import de.ellpeck.actuallyadditions.mod.sack.SackManager;
@ -32,10 +32,10 @@ import net.minecraftforge.items.CapabilityItemHandler;
import java.util.UUID;
public class ItemBag extends ItemBase {
public class Sack extends ItemBase {
public final boolean isVoid;
public ItemBag(boolean isVoid) {
public Sack(boolean isVoid) {
super(ActuallyItems.defaultProps().stacksTo(1));
this.isVoid = isVoid;
}
@ -87,7 +87,7 @@ public class ItemBag extends ItemBase {
@Override
public ActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
ItemStack sackStack = player.getItemInHand(hand);
if (!world.isClientSide && hand == Hand.MAIN_HAND && sackStack.getItem() instanceof ItemBag && player instanceof ServerPlayerEntity) {
if (!world.isClientSide && hand == Hand.MAIN_HAND && sackStack.getItem() instanceof Sack && player instanceof ServerPlayerEntity) {
if (!isVoid) {
SackData data = getData(sackStack);
@ -100,7 +100,7 @@ public class ItemBag extends ItemBase {
NetworkHooks.openGui((ServerPlayerEntity) player, new SimpleNamedContainerProvider((id, inv, entity) ->
new ContainerBag(id, inv, uuid, data.getSpecialHandler()), sackStack.getHoverName()), (buffer -> buffer.writeUUID(uuid)));
new SackContainer(id, inv, uuid, data.getSpecialHandler()), sackStack.getHoverName()), (buffer -> buffer.writeUUID(uuid)));
}
@ -112,7 +112,7 @@ public class ItemBag extends ItemBase {
}
public static SackData getData(ItemStack stack) {
if (!(stack.getItem() instanceof ItemBag))
if (!(stack.getItem() instanceof Sack))
return null;
UUID uuid;
CompoundNBT tag = stack.getOrCreateTag();

View file

@ -28,9 +28,9 @@ import net.minecraftforge.eventbus.api.Event;
import java.util.List;
public class ItemWorm extends ItemBase {
public class Worm extends ItemBase {
public ItemWorm() {
public Worm() {
super();
}