Skip to content

Commit

Permalink
add network size enum to fix overlap; fix NPE; merged from upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
Lothrazar committed Sep 22, 2024
2 parents 5386a3d + 877b101 commit d59dffe
Show file tree
Hide file tree
Showing 13 changed files with 95 additions and 95 deletions.
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ minecraft {
// Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
property 'forge.logging.console.level', 'debug'


mods {
"${mod_id}" {
source sourceSets.main
Expand All @@ -86,6 +87,7 @@ minecraft {
property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg"
// Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
property 'forge.enabledGameTestNamespaces', mod_id
args '--username=ADev'
}

server {
Expand Down
8 changes: 6 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx6G
org.gradle.daemon=false
# org.gradle.java.home=C:\Program Files\AdoptOpenJDK\jdk-16.0.1.9-hotspot


#use this if the gradle build has ' Could not find tools.jar. Please check that _____ contains a valid JDK installation '
#org.gradle.java.home=C:\\Program Files\\Eclipse Adoptium\\jdk-8.0.322.6-hotspot

# as needed run/server.properties : online-mode=false
# implementation fg.deobf("curse.maven:simple-storage-network-268495:3163007")


mod_id=storagenetwork
curse_id=268495
mod_version=1.11.0
mod_version=1.11.1



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
import com.lothrazar.storagenetwork.api.EnumSortType;
import com.lothrazar.storagenetwork.api.IGuiNetwork;
import com.lothrazar.storagenetwork.gui.NetworkWidget;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkGuiSize;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkScreenSize;
import com.lothrazar.storagenetwork.jei.JeiHooks;
import com.lothrazar.storagenetwork.network.ClearRecipeMessage;
import com.lothrazar.storagenetwork.network.RequestMessage;
import com.lothrazar.storagenetwork.network.SettingsSyncMessage;
import com.lothrazar.storagenetwork.registry.PacketRegistry;
import com.mojang.blaze3d.platform.InputConstants;
Expand Down Expand Up @@ -39,7 +37,7 @@ public class ScreenNetworkInventory extends AbstractContainerScreen<ContainerNet
public ScreenNetworkInventory(ContainerNetworkInventory container, Inventory inv, Component name) {
super(container, inv, name);
tile = container.tile;
network = new NetworkWidget(this, NetworkGuiSize.LARGE);
network = new NetworkWidget(this, NetworkScreenSize.LARGE);
imageWidth = WIDTH;
imageHeight = HEIGHT;
}
Expand Down Expand Up @@ -130,9 +128,6 @@ public BlockPos getPos() {

@Override
public void renderBg(GuiGraphics ms, float partialTicks, int mouseX, int mouseY) {
// minecraft.getTextureManager().bind(texture);
// RenderSystem.setShader(GameRenderer::getPositionTexShader);
// RenderSystem.setShaderTexture(0, texture);
int xCenter = (width - imageWidth) / 2;
int yCenter = (height - imageHeight) / 2;
ms.blit(texture, xCenter, yCenter, 0, 0, imageWidth, imageHeight);
Expand Down Expand Up @@ -174,14 +169,6 @@ public boolean mouseScrolled(double x, double y, double mouseButton) {
public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) {
super.mouseClicked(mouseX, mouseY, mouseButton);
network.mouseClicked(mouseX, mouseY, mouseButton);
//recipe clear thingy
int rectX = 63;
int rectY = 110;
if (isHovering(rectX, rectY, 7, 7, mouseX, mouseY)) {
PacketRegistry.INSTANCE.sendToServer(new ClearRecipeMessage());
PacketRegistry.INSTANCE.sendToServer(new RequestMessage(0, ItemStack.EMPTY, false, false));
return true;
}
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import net.minecraft.world.InteractionResult;
import net.minecraft.world.MenuProvider;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.RenderShape;
Expand Down Expand Up @@ -47,15 +46,6 @@ public void onRemove(BlockState state, Level worldIn, BlockPos pos, BlockState n
Containers.dropContents(worldIn, pos, (Container) blockentity);
worldIn.updateNeighbourForOutputSignal(pos, this);
}
BlockEntity tileentity = worldIn.getBlockEntity(pos);
if (tileentity instanceof TileRequest) {
TileRequest tile = (TileRequest) tileentity;
for (ItemStack entry : tile.matrix.values()) {
if (!entry.isEmpty()) {
Containers.dropItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), entry);
}
}
}
super.onRemove(state, worldIn, pos, newState, isMoving);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@
import net.minecraft.core.BlockPos;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.ContainerLevelAccess;
import net.minecraft.world.level.Level;

public class ContainerNetworkCraftingTable extends ContainerNetwork {

private final TileRequest tileRequest;
private final ContainerLevelAccess access;

public ContainerNetworkCraftingTable(int windowId, Level world, BlockPos pos, Inventory playerInv, Player player) {
super(SsnRegistry.Menus.REQUEST.get(), windowId);
tileRequest = (TileRequest) world.getBlockEntity(pos);
matrix = new NetworkCraftingInventory(this, tileRequest.matrix);
matrix = new NetworkCraftingInventory(this);
access = ContainerLevelAccess.create(world, pos);
this.playerInv = playerInv;
SlotCraftingNetwork slotCraftOutput = new SlotCraftingNetwork(this, playerInv.player, matrix, resultInventory, 0, 101, 128);
slotCraftOutput.setTileMain(getTileMain());
Expand All @@ -32,18 +35,22 @@ public boolean isCrafting() {
return true;
}

@Override
public void removed(Player player) {
super.removed(player);
//the contents of the crafting matrix gets returned to the player
this.access.execute((level, pos) -> {
this.clearContainer(player, this.matrix);
});
}

@Override
public void slotChanged() {
//parent is abstract
//seems to not happen from -shiftclick- crafting
for (int i = 0; i < matrix.getContainerSize(); i++) {
getTileRequest().matrix.put(i, matrix.getItem(i));
}
}

@Override
public boolean stillValid(Player playerIn) {
// TileMain main = getTileMain();
TileRequest table = getTileRequest();
BlockPos pos = table.getBlockPos();
return playerIn.distanceToSqr(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D) <= 64.0D;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.lothrazar.storagenetwork.api.EnumSortType;
import com.lothrazar.storagenetwork.api.IGuiNetwork;
import com.lothrazar.storagenetwork.gui.NetworkWidget;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkGuiSize;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkScreenSize;
import com.lothrazar.storagenetwork.jei.JeiHooks;
import com.lothrazar.storagenetwork.network.ClearRecipeMessage;
import com.lothrazar.storagenetwork.network.RequestMessage;
Expand Down Expand Up @@ -37,7 +37,7 @@ public class ScreenNetworkTable extends AbstractContainerScreen<ContainerNetwork
public ScreenNetworkTable(ContainerNetworkCraftingTable container, Inventory inv, Component name) {
super(container, inv, name);
tile = container.getTileRequest();
network = new NetworkWidget(this, NetworkGuiSize.NORMAL);
network = new NetworkWidget(this, NetworkScreenSize.NORMAL);
imageWidth = WIDTH;
imageHeight = HEIGHT;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.lothrazar.storagenetwork.api.ITileNetworkSync;
import com.lothrazar.storagenetwork.block.TileConnectable;
import com.lothrazar.storagenetwork.registry.SsnRegistry;
import com.lothrazar.storagenetwork.util.UtilInventory;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag;
Expand All @@ -24,11 +25,12 @@ public class TileRequest extends TileConnectable implements MenuProvider, ITileN
public static final String NBT_JEI = StorageNetworkMod.MODID + "jei";
private static final String NBT_DIR = StorageNetworkMod.MODID + "dir";
private static final String NBT_SORT = StorageNetworkMod.MODID + "sort";
public Map<Integer, ItemStack> matrix = new HashMap<>();
private boolean downwards;
private EnumSortType sort = EnumSortType.NAME;
private boolean isJeiSearchSynced;
private boolean autoFocus = true;
@Deprecated
private Map<Integer, ItemStack> matrix = new HashMap<>();

public TileRequest(BlockPos pos, BlockState state) {
super(SsnRegistry.Tiles.REQUEST.get(), pos, state);
Expand All @@ -44,13 +46,25 @@ public void load(CompoundTag compound) {
if (compound.contains(NBT_JEI)) {
this.setJeiSearchSynced(compound.getBoolean(NBT_JEI));
}
ListTag invList = compound.getList("matrix", Tag.TAG_COMPOUND);
matrix = new HashMap<>();
for (int i = 0; i < invList.size(); i++) {
CompoundTag stackTag = invList.getCompound(i);
int slot = stackTag.getByte("Slot");
ItemStack s = ItemStack.of(stackTag);
matrix.put(slot, s);
//legacy support: instead of deleting items, in this one-off world upgrade transition
//drop them on the ground
//then forever more it will not be saved to this data location
if (compound.contains("matrix")) {
ListTag invList = compound.getList("matrix", Tag.TAG_COMPOUND);
for (int i = 0; i < invList.size(); i++) {
CompoundTag stackTag = invList.getCompound(i);
int slot = stackTag.getByte("Slot");
ItemStack s = ItemStack.of(stackTag);
if (level != null) {
StorageNetworkMod.LOGGER.info("world upgrade: item dropping onluy once so it doesnt get deleted; " + this.worldPosition + ":" + s);
UtilInventory.dropItem(level, this.worldPosition, s);
matrix.put(slot, ItemStack.EMPTY);
}
else {
//i was not able to drop it in the world. save it so its not deleted. will be hidden from player
matrix.put(slot, s);
}
}
}
super.load(compound);
}
Expand All @@ -61,16 +75,26 @@ public void saveAdditional(CompoundTag compound) {
compound.putBoolean(NBT_DIR, isDownwards());
compound.putInt(NBT_SORT, getSort().ordinal());
compound.putBoolean(NBT_JEI, this.isJeiSearchSynced());
ListTag invList = new ListTag();
for (int i = 0; i < 9; i++) {
if (matrix.get(i) != null && matrix.get(i).isEmpty() == false) {
CompoundTag stackTag = new CompoundTag();
stackTag.putByte("Slot", (byte) i);
matrix.get(i).save(stackTag);
invList.add(stackTag);
if (matrix != null) {
ListTag invList = new ListTag();
for (int i = 0; i < 9; i++) {
if (matrix.get(i) != null && matrix.get(i).isEmpty() == false) {
if (level != null) {
StorageNetworkMod.LOGGER.info("World Upgrade: item dropping only once so it doesnt get deleted; " + this.worldPosition + ":" + matrix.get(i));
UtilInventory.dropItem(level, this.worldPosition, matrix.get(i));
matrix.put(i, ItemStack.EMPTY);
}
else {
//i was not able to drop it in the world. keep saving it and never delete items. will be hidden from player
CompoundTag stackTag = new CompoundTag();
stackTag.putByte("Slot", (byte) i);
matrix.get(i).save(stackTag);
invList.add(stackTag);
}
}
}
compound.put("matrix", invList);
}
compound.put("matrix", invList);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.lothrazar.storagenetwork.gui;

import java.util.List;
import java.util.Map;
import net.minecraft.core.NonNullList;
import net.minecraft.world.ContainerHelper;
Expand All @@ -11,32 +10,22 @@

public class NetworkCraftingInventory extends TransientCraftingContainer {

private static final int SIZE = 3;
/** stupid thing is private with no getter so overwrite */
private final NonNullList<ItemStack> stackList;
private final AbstractContainerMenu eventHandler;
private boolean skipEvents;

private NetworkCraftingInventory(AbstractContainerMenu eventHandlerIn, int width, int height) {
super(eventHandlerIn, width, height);
public NetworkCraftingInventory(AbstractContainerMenu eventHandlerIn) {
super(eventHandlerIn, SIZE, SIZE);
eventHandler = eventHandlerIn;
stackList = NonNullList.<ItemStack> withSize(3 * 3, ItemStack.EMPTY);
stackList = NonNullList.<ItemStack> withSize(SIZE * SIZE, ItemStack.EMPTY);
}

public NetworkCraftingInventory(AbstractContainerMenu eventHandlerIn, Map<Integer, ItemStack> matrix) {
this(eventHandlerIn, 3, 3);
this(eventHandlerIn);
skipEvents = true;
for (int i = 0; i < 9; i++) {
if (matrix.get(i) != null && matrix.get(i).isEmpty() == false) {
setItem(i, matrix.get(i));
}
}
skipEvents = false;
}

public NetworkCraftingInventory(AbstractContainerMenu eventHandlerIn, List<ItemStack> matrix) {
this(eventHandlerIn, 3, 3);
skipEvents = true;
for (int i = 0; i < 9; i++) {
for (int i = 0; i < SIZE * SIZE; i++) {
if (matrix.get(i) != null && matrix.get(i).isEmpty() == false) {
setItem(i, matrix.get(i));
}
Expand Down
18 changes: 14 additions & 4 deletions src/main/java/com/lothrazar/storagenetwork/gui/NetworkWidget.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,10 @@ public class NetworkWidget {

@Deprecated
public NetworkWidget(IGuiNetwork gui) {
this(gui, NetworkGuiSize.NORMAL);
this(gui, NetworkScreenSize.NORMAL);
}
public NetworkWidget(IGuiNetwork gui, NetworkGuiSize size) {

public NetworkWidget(IGuiNetwork gui, NetworkScreenSize size) {
this.gui = gui;
switch (size) {
case LARGE:
Expand All @@ -73,6 +74,16 @@ public NetworkWidget(IGuiNetwork gui, NetworkGuiSize size) {
slots = Lists.newArrayList();
PacketRegistry.INSTANCE.sendToServer(new RequestMessage());
lastClick = System.currentTimeMillis();
switch (size) {
case LARGE:
setLines(8);
setFieldHeight(180 - 8); // offset is important
break;
case NORMAL:
setLines(4);
setFieldHeight(90);
break;
}
}

public List<ItemStack> getStacks() {
Expand Down Expand Up @@ -185,7 +196,6 @@ public void rebuildItemSlots(List<ItemStack> stacksToDisplay) {
break;
}
int in = index;

slots.add(new ItemSlotNetwork(gui, stacksToDisplay.get(in),
gui.getGuiLeft() + 8 + col * 18,
gui.getGuiTopFixJei() + 10 + row * 18,
Expand Down Expand Up @@ -419,7 +429,7 @@ public interface ISearchHandler {
public abstract String getName();
}

public enum NetworkGuiSize {
public enum NetworkScreenSize {
NORMAL, LARGE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.lothrazar.storagenetwork.api.EnumSortType;
import com.lothrazar.storagenetwork.api.IGuiNetwork;
import com.lothrazar.storagenetwork.gui.NetworkWidget;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkGuiSize;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkScreenSize;
import com.lothrazar.storagenetwork.jei.JeiHooks;
import com.lothrazar.storagenetwork.network.ClearRecipeMessage;
import com.lothrazar.storagenetwork.network.RequestMessage;
Expand Down Expand Up @@ -36,8 +36,7 @@ public ScreenNetworkCraftingRemote(ContainerNetworkCraftingRemote screenContaine
super(screenContainer, inv, titleIn);
//since the rightclick action forces only MAIN_HAND openings, is ok
this.remote = screenContainer.getRemote();// inv.player.getItemInHand(InteractionHand.MAIN_HAND);
network = new NetworkWidget(this, NetworkGuiSize.NORMAL);

network = new NetworkWidget(this, NetworkScreenSize.NORMAL);
this.imageWidth = WIDTH;
this.imageHeight = HEIGHT;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import com.lothrazar.storagenetwork.api.EnumSortType;
import com.lothrazar.storagenetwork.api.IGuiNetwork;
import com.lothrazar.storagenetwork.gui.NetworkWidget;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkGuiSize;
import com.lothrazar.storagenetwork.gui.NetworkWidget.NetworkScreenSize;
import com.lothrazar.storagenetwork.jei.JeiHooks;
import com.lothrazar.storagenetwork.network.SettingsSyncMessage;
import com.lothrazar.storagenetwork.registry.PacketRegistry;
Expand All @@ -32,8 +32,8 @@ public class ScreenNetworkRemote extends AbstractContainerScreen<ContainerNetwor
public ScreenNetworkRemote(ContainerNetworkRemote screenContainer, Inventory inv, Component titleIn) {
super(screenContainer, inv, titleIn);
//since the rightclick action forces only MAIN_HAND openings, is ok
this.remote = screenContainer.getRemote();//inv.player.getItemInHand(InteractionHand.MAIN_HAND);
network = new NetworkWidget(this, NetworkGuiSize.LARGE);
this.remote = screenContainer.getRemote();
network = new NetworkWidget(this, NetworkScreenSize.LARGE);
this.imageWidth = WIDTH;
this.imageHeight = HEIGHT;
}
Expand Down
Loading

0 comments on commit d59dffe

Please sign in to comment.