Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 41 additions & 40 deletions src/main/java/com/lothrazar/storagenetwork/StorageNetworkMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,50 +32,51 @@
@Mod(StorageNetworkMod.MODID)
public class StorageNetworkMod {

public static final String MODID = "storagenetwork";
public static final Logger LOGGER = LogManager.getLogger();
public static ConfigRegistry CONFIG;
public static final String MODID = "storagenetwork";
public static final Logger LOGGER = LogManager.getLogger();
public static ConfigRegistry CONFIG;

public StorageNetworkMod() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(StorageNetworkMod::setup);
MinecraftForge.EVENT_BUS.register(new SsnRegistry.Tiles());
MinecraftForge.EVENT_BUS.register(new SsnEvents());
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
SsnRegistry.BLOCKS.register(bus);
SsnRegistry.ITEMS.register(bus);
SsnRegistry.TILES.register(bus);
SsnRegistry.CONTAINERS.register(bus);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupClient);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::registerMapping);
});
}
public StorageNetworkMod() {
FMLJavaModLoadingContext.get().getModEventBus().addListener(StorageNetworkMod::setup);
MinecraftForge.EVENT_BUS.register(new SsnRegistry.Tiles());
MinecraftForge.EVENT_BUS.register(new SsnEvents());
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
SsnRegistry.BLOCKS.register(bus);
SsnRegistry.ITEMS.register(bus);
SsnRegistry.TILES.register(bus);
SsnRegistry.CONTAINERS.register(bus);
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setupClient);
FMLJavaModLoadingContext.get().getModEventBus().addListener(this::registerMapping);
});
}

private static void setup(FMLCommonSetupEvent event) {
PacketRegistry.init();
CONFIG = new ConfigRegistry(FMLPaths.CONFIGDIR.get().resolve(MODID + ".toml"));
}
private static void setup(FMLCommonSetupEvent event) {
PacketRegistry.init();
CONFIG = new ConfigRegistry(FMLPaths.CONFIGDIR.get().resolve(MODID + ".toml"));
}

private void setupClient(final FMLClientSetupEvent event) {
MenuScreens.register(SsnRegistry.Menus.REQUEST.get(), ScreenNetworkTable::new);
MenuScreens.register(SsnRegistry.Menus.FILTER_KABEL.get(), ScreenCableFilter::new);
MenuScreens.register(SsnRegistry.Menus.IMPORT_FILTER_KABEL.get(), ScreenCableImportFilter::new);
MenuScreens.register(SsnRegistry.Menus.EXPORT_KABEL.get(), ScreenCableExportFilter::new);
MenuScreens.register(SsnRegistry.Menus.INVENTORY_REMOTE.get(), ScreenNetworkRemote::new);
MenuScreens.register(SsnRegistry.Menus.CRAFTING_REMOTE.get(), ScreenNetworkCraftingRemote::new);
MenuScreens.register(SsnRegistry.Menus.INVENTORY.get(), ScreenNetworkInventory::new);
MenuScreens.register(SsnRegistry.Menus.COLLECTOR.get(), ScreenCollectionFilter::new);
MenuScreens.register(SsnRegistry.Menus.REQUEST_EXPANDED.get(), ScreenNetworkInventoryExpanded::new);
MenuScreens.register(SsnRegistry.Menus.EXPANDED_REMOTE.get(), ScreenNetworkExpandedRemote::new);
}
private void setupClient(final FMLClientSetupEvent event) {
MenuScreens.register(SsnRegistry.Menus.REQUEST.get(), ScreenNetworkTable::new);
MenuScreens.register(SsnRegistry.Menus.FILTER_KABEL.get(), ScreenCableFilter::new);
MenuScreens.register(SsnRegistry.Menus.IMPORT_FILTER_KABEL.get(), ScreenCableImportFilter::new);
MenuScreens.register(SsnRegistry.Menus.EXPORT_KABEL.get(), ScreenCableExportFilter::new);
MenuScreens.register(SsnRegistry.Menus.INVENTORY_REMOTE.get(), ScreenNetworkRemote::new);
MenuScreens.register(SsnRegistry.Menus.CRAFTING_REMOTE.get(), ScreenNetworkCraftingRemote::new);
MenuScreens.register(SsnRegistry.Menus.INVENTORY.get(), ScreenNetworkInventory::new);
MenuScreens.register(SsnRegistry.Menus.COLLECTOR.get(), ScreenCollectionFilter::new);
MenuScreens.register(SsnRegistry.Menus.REQUEST_EXPANDED.get(), ScreenNetworkInventoryExpanded::new);
MenuScreens.register(SsnRegistry.Menus.EXPANDED_REMOTE.get(), ScreenNetworkExpandedRemote::new);
}

private void registerMapping(final RegisterKeyMappingsEvent event) {
event.register(ClientEventRegistry.INVENTORY_KEY);
}
private void registerMapping(final RegisterKeyMappingsEvent event) {
event.register(ClientEventRegistry.INVENTORY_KEY);
event.register(ClientEventRegistry.COLLECTOR_TOGGLE_KEY);
}

public static void log(String s) {
if (CONFIG.logspam()) {
LOGGER.info(s);
public static void log(String s) {
if (CONFIG.logspam()) {
LOGGER.info(s);
}
}
}
}
85 changes: 51 additions & 34 deletions src/main/java/com/lothrazar/storagenetwork/item/ItemCollector.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.lothrazar.storagenetwork.item;

import java.util.List;

import net.minecraft.nbt.CompoundTag;
import org.apache.commons.lang3.tuple.Triple;
import com.lothrazar.library.item.ItemFlib;
import com.lothrazar.storagenetwork.StorageNetworkMod;
Expand Down Expand Up @@ -31,8 +33,9 @@
public class ItemCollector extends ItemFlib {

public static final String NBT_BOUND = "bound";
private static final String NBT_ENABLED = "Enabled";

public ItemCollector(Properties properties) {
public ItemCollector(Properties properties) {
super(properties.stacksTo(1));
}

Expand All @@ -42,41 +45,55 @@ protected ItemStack findAmmo(Player player, Item item) {
return remote.getRight();
}

// not subscribe, called from SsnEvents.java
public void onEntityItemPickupEvent(EntityItemPickupEvent event) {
if (event.getEntity() instanceof Player &&
event.getItem() != null &&
event.getItem().getItem().isEmpty() == false) {
ItemStack item = event.getItem().getItem();
Player player = event.getEntity();
Level world = player.level();
DimPos dp = DimPos.getPosStored(this.findAmmo(player, this));
if (dp != null && !world.isClientSide) {
ServerLevel serverTargetWorld = DimPos.stringDimensionLookup(dp.getDimension(), world.getServer());
if (serverTargetWorld == null) {
StorageNetworkMod.LOGGER.error("Missing dimension key " + dp.getDimension());
return;
}
BlockEntity tile = serverTargetWorld.getBlockEntity(dp.getBlockPos());
if (tile instanceof TileMain) {
TileMain network = (TileMain) tile;
// Create a new reference to the stack, try to insert that into the
// network, then change the original stack size so the player picks up
// only what remains, if anything.
int countUnmoved = network.insertStack(item.copy(), false);
item.setCount(countUnmoved);
// We still want to play the pickup sound, even if Minecraft silently
// deletes the stack we just emptied.
if (countUnmoved == 0) {
UtilTileEntity.playSoundFromServer((ServerPlayer) player, SoundEvents.ITEM_PICKUP, 0.2F);
}
public void toggleEnabled(ItemStack stack, Player player) {
boolean enabled = stack.getOrCreateTag().getBoolean(NBT_ENABLED);
stack.getOrCreateTag().putBoolean(NBT_ENABLED, !enabled);
player.displayClientMessage(
Component.literal("Collector " + (!enabled ? "enabled" : "disabled")),
true
);
}

// not subscribe, called from SsnEvents.java
public void onEntityItemPickupEvent(EntityItemPickupEvent event) {
if (event.getEntity() instanceof Player &&
event.getItem() != null &&
!event.getItem().getItem().isEmpty()) {
Player player = event.getEntity();

// find the collector that the player has with them (main hand, offhand, curios...)
ItemStack collectorStack = this.findAmmo(player, this);
if (collectorStack.isEmpty()) {
return;
}

// check if it is turned on
CompoundTag tag = collectorStack.getOrCreateTag();
if (!tag.getBoolean("Enabled")) {
return;
}

ItemStack item = event.getItem().getItem();
Level world = player.level();
DimPos dp = DimPos.getPosStored(collectorStack);
if (dp != null && !world.isClientSide) {
ServerLevel serverTargetWorld = DimPos.stringDimensionLookup(dp.getDimension(), world.getServer());
if (serverTargetWorld == null) {
StorageNetworkMod.LOGGER.error("Missing dimension key " + dp.getDimension());
return;
}
BlockEntity tile = serverTargetWorld.getBlockEntity(dp.getBlockPos());
if (tile instanceof TileMain network) {
int countUnmoved = network.insertStack(item.copy(), false);
item.setCount(countUnmoved);
if (countUnmoved == 0) {
UtilTileEntity.playSoundFromServer((ServerPlayer) player, SoundEvents.ITEM_PICKUP, 0.2F);
}
}
// else { StorageNetworkMod.LOGGER.error("item.remote.notfound"); }
}
}
// else {
// StorageNetworkMod.LOGGER.error("item.remote.notfound");
// }
}
}
}

@Override
public InteractionResult useOn(UseOnContext context) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.lothrazar.storagenetwork.network;

import com.lothrazar.storagenetwork.item.ItemCollector;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.item.ItemStack;
import net.minecraftforge.network.NetworkEvent;

import java.util.function.Supplier;

public class KeybindCollectorToggleMessage {

public KeybindCollectorToggleMessage() {
}

public static void handle(KeybindCollectorToggleMessage msg, Supplier<NetworkEvent.Context> ctx) {
ctx.get().enqueueWork(() -> {
ServerPlayer player = ctx.get().getSender();
if (player != null) {
Inventory inv = player.getInventory();

for (ItemStack stack : inv.items) {
if (stack.getItem() instanceof ItemCollector collector) {
collector.toggleEnabled(stack, player);
return;
}
}

for (ItemStack stack : inv.armor) {
if (stack.getItem() instanceof ItemCollector collector) {
collector.toggleEnabled(stack, player);
return;
}
}

for (ItemStack stack : inv.offhand) {
if (stack.getItem() instanceof ItemCollector collector) {
collector.toggleEnabled(stack, player);
return;
}
}
}
});
ctx.get().setPacketHandled(true);
}


public void encode(FriendlyByteBuf friendlyByteBuf) {
}

public static KeybindCollectorToggleMessage decode(FriendlyByteBuf friendlyByteBuf) {
KeybindCollectorToggleMessage message = new KeybindCollectorToggleMessage();
return message;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@
@Mod.EventBusSubscriber(value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public class ClientEventRegistry {

public static final ResourceLocation SLOT = new ResourceLocation(StorageNetworkMod.MODID, "textures/gui/slot.png");
public static final KeyMapping INVENTORY_KEY = new KeyMapping("key.storagenetwork.remote", KeyConflictContext.UNIVERSAL, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_I, "key.categories.inventory");
public static final ResourceLocation SLOT = new ResourceLocation(StorageNetworkMod.MODID, "textures/gui/slot.png");
public static final KeyMapping INVENTORY_KEY = new KeyMapping("key.storagenetwork.remote", KeyConflictContext.UNIVERSAL, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_I, "key.categories.inventory");
public static final KeyMapping COLLECTOR_TOGGLE_KEY = new KeyMapping("key.storagenetwork.collector_toggle", KeyConflictContext.UNIVERSAL, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_DELETE, "key.categories.inventory");

@SubscribeEvent
public static void onRegisterRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(Tiles.KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.EXPORT_KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.STORAGE_KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.IMPORT_FILTER_KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.IMPORT_KABEL.get(), CableFacadeRenderer::new);
}
@SubscribeEvent
public static void onRegisterRenderers(EntityRenderersEvent.RegisterRenderers event) {
event.registerBlockEntityRenderer(Tiles.KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.EXPORT_KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.STORAGE_KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.IMPORT_FILTER_KABEL.get(), CableFacadeRenderer::new);
event.registerBlockEntityRenderer(Tiles.IMPORT_KABEL.get(), CableFacadeRenderer::new);
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,7 @@
package com.lothrazar.storagenetwork.registry;

import com.lothrazar.storagenetwork.StorageNetworkMod;
import com.lothrazar.storagenetwork.network.CableDataMessage;
import com.lothrazar.storagenetwork.network.CableFacadeMessage;
import com.lothrazar.storagenetwork.network.CableIOMessage;
import com.lothrazar.storagenetwork.network.CableLimitMessage;
import com.lothrazar.storagenetwork.network.ClearRecipeMessage;
import com.lothrazar.storagenetwork.network.InsertMessage;
import com.lothrazar.storagenetwork.network.KeybindCurioMessage;
import com.lothrazar.storagenetwork.network.RecipeMessage;
import com.lothrazar.storagenetwork.network.RefreshFilterClientMessage;
import com.lothrazar.storagenetwork.network.RequestMessage;
import com.lothrazar.storagenetwork.network.SettingsSyncMessage;
import com.lothrazar.storagenetwork.network.SortClientMessage;
import com.lothrazar.storagenetwork.network.StackRefreshClientMessage;
import com.lothrazar.storagenetwork.network.StackResponseClientMessage;
import com.lothrazar.storagenetwork.network.*;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.simple.SimpleChannel;
Expand Down Expand Up @@ -47,6 +34,7 @@ public static void init() {
INSTANCE.registerMessage(id++, RefreshFilterClientMessage.class, RefreshFilterClientMessage::encode, RefreshFilterClientMessage::decode, RefreshFilterClientMessage::handle);
INSTANCE.registerMessage(id++, SortClientMessage.class, SortClientMessage::encode, SortClientMessage::decode, SortClientMessage::handle);
INSTANCE.registerMessage(id++, KeybindCurioMessage.class, KeybindCurioMessage::encode, KeybindCurioMessage::decode, KeybindCurioMessage::handle);
INSTANCE.registerMessage(id++, KeybindCollectorToggleMessage.class, KeybindCollectorToggleMessage::encode, KeybindCollectorToggleMessage::decode, KeybindCollectorToggleMessage::handle);
INSTANCE.registerMessage(id++, CableFacadeMessage.class, CableFacadeMessage::encode, CableFacadeMessage::decode, CableFacadeMessage::handle);
}
}
Loading