Skip to content

Commit

Permalink
Merge pull request #82 from mircokroon/inventory-fixes
Browse files Browse the repository at this point in the history
Inventory fixes
  • Loading branch information
mircokroon authored Oct 16, 2020
2 parents ae7fbf5 + 7076c12 commit feeb180
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 6 deletions.
4 changes: 4 additions & 0 deletions src/main/java/game/data/Coordinate3D.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ private int withinChunk(int val) {
return newVal;
}

public CoordinateDim3D addDimension3D(Dimension dimension) {
return new CoordinateDim3D(this, dimension);
}

@Override
public String toString() {
return "(" + x + ", " + y + ", " + z + ")";
Expand Down
34 changes: 34 additions & 0 deletions src/main/java/game/data/CoordinateDim3D.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package game.data;

public class CoordinateDim3D extends Coordinate3D {
private final Dimension dimension;

public CoordinateDim3D(Coordinate3D pos, Dimension dimension) {
super(pos.getX(), pos.getY(), pos.getZ());
this.dimension = dimension;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (!super.equals(o)) {
return false;
}

CoordinateDim3D that = (CoordinateDim3D) o;

return dimension == that.dimension;
}

@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + (dimension != null ? dimension.hashCode() : 0);
return result;
}
}
6 changes: 6 additions & 0 deletions src/main/java/game/data/chunk/Chunk.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@
import game.Game;
import game.data.Coordinate3D;
import game.data.CoordinateDim2D;
import game.data.CoordinateDim3D;
import game.data.Dimension;
import game.data.WorldManager;
import game.data.chunk.entity.Entity;
import game.data.chunk.palette.BlockState;
import game.data.chunk.palette.Palette;
import game.data.chunk.version.ColorTransformer;
import game.data.container.ContainerManager;
import game.data.container.InventoryWindow;
import packets.DataTypeProvider;
import se.llbit.nbt.CompoundTag;
Expand Down Expand Up @@ -104,6 +106,10 @@ public void addTileEntity(Coordinate3D location, SpecificTag tag) {
entity.add("z", new IntTag(location.getZ()));

tileEntities.put(location, tag);

// check for inventory contents we previously saved
CoordinateDim3D pos = location.addDimension3D(this.location.getDimension());
WorldManager.getContainerManager().loadPreviousInventoriesAt(this, pos);
}

/**
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/game/data/chunk/palette/BlockState.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
* A block state in the global palette (1.13+).
*/
public class BlockState {
private String name;
private int id;
private Map<String, String> properties;
private final String name;
private final int id;
private final Map<String, String> properties;

public BlockState(String name, int id, Map<String, String> properties) {
this.name = name;
Expand All @@ -33,11 +33,11 @@ public boolean isDoubleChest() {
}

String type = properties.get("type");
return type.equals("left") || type.equals("right");
return type != null && (type.equals("left") || type.equals("right"));
}

public boolean hasProperty(String property) {
return properties.get(property) != null;
return properties.containsKey(property);
}

/**
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/game/data/chunk/palette/GlobalPalette.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,15 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

/**
* Holds a global palette as introduced in 1.13. These are read from a simple JSON file that is generated by the
* Minecraft server.jar. More details are in the readme file in the resource folder.
*/
public class GlobalPalette {
private static final HashMap<String, String> EMPTY_MAP = new HashMap<>();
private HashMap<Integer, BlockState> states;
private HashMap<String, BlockState> nameStates;

Expand All @@ -35,6 +37,10 @@ public GlobalPalette(InputStream input) {

JsonResult map = new Gson().fromJson(new InputStreamReader(input), JsonResult.class);
map.forEach((name, type) -> type.states.forEach(state -> {
if (state.properties == null) {
state.properties = EMPTY_MAP;
}

BlockState s = new BlockState(name, state.id, state.properties);
states.put(state.id, s);
nameStates.put(name, s);
Expand Down
13 changes: 12 additions & 1 deletion src/main/java/game/data/container/ContainerManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import game.data.Coordinate2D;
import game.data.Coordinate3D;
import game.data.CoordinateDim2D;
import game.data.CoordinateDim3D;
import game.data.WorldManager;
import game.data.chunk.Chunk;
import game.data.chunk.palette.BlockState;
Expand All @@ -17,10 +18,12 @@ public class ContainerManager {
private static final int PLAYER_INVENTORY = 0;

private Coordinate3D lastInteractedWith;
private Map<Integer, InventoryWindow> knownWindows;
private final Map<Integer, InventoryWindow> knownWindows;
private final Map<CoordinateDim3D, InventoryWindow> storedWindows;

public ContainerManager() {
knownWindows = new HashMap<>();
storedWindows = new HashMap<>();
}

public void lastInteractedWith(Coordinate3D coordinates) {
Expand Down Expand Up @@ -81,6 +84,7 @@ private void closeWindow(InventoryWindow window) {
handleChest1_12(block, window);
} else {
c.addInventory(window);
storedWindows.put(window.containerLocation.addDimension3D(Game.getDimension()), window);
}
}

Expand Down Expand Up @@ -145,5 +149,12 @@ public void items(int windowId, List<Slot> slots) {
window.setSlots(slots);
}
}

public void loadPreviousInventoriesAt(Chunk c, CoordinateDim3D location) {
if (storedWindows.containsKey(location)) {
c.addInventory(storedWindows.get(location));
}

}
}

0 comments on commit feeb180

Please sign in to comment.