Change back id to being UUIDs
This commit is contained in:
parent
05bed3a737
commit
998ce95f1c
@ -1,5 +1,6 @@
|
|||||||
package ru.dbotthepony.mc.otm.capability.drive;
|
package ru.dbotthepony.mc.otm.capability.drive;
|
||||||
|
|
||||||
|
import net.minecraft.MethodsReturnNonnullByDefault;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
@ -7,11 +8,16 @@ import net.minecraftforge.common.util.INBTSerializable;
|
|||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import javax.annotation.ParametersAreNonnullByDefault;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
|
|
||||||
|
@ParametersAreNonnullByDefault
|
||||||
|
@MethodsReturnNonnullByDefault
|
||||||
public interface IMatteryDrive {
|
public interface IMatteryDrive {
|
||||||
|
record StoredStack(ItemStack stack, UUID id) {};
|
||||||
|
|
||||||
List<StoredStack> getItems();
|
List<StoredStack> getItems();
|
||||||
|
|
||||||
boolean isDirty();
|
boolean isDirty();
|
||||||
@ -22,32 +28,27 @@ public interface IMatteryDrive {
|
|||||||
* @param item
|
* @param item
|
||||||
* @return all items belonging to passed class
|
* @return all items belonging to passed class
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
List<StoredStack> findItems(Item item);
|
||||||
List<StoredStack> findItems(@Nonnull Item item);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param stack
|
* @param stack
|
||||||
* @return all items that match this itemstack
|
* @return all items that match this itemstack
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
List<StoredStack> findItems(ItemStack stack);
|
||||||
List<StoredStack> findItems(@Nonnull ItemStack stack);
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
StoredStack getItem(int id);
|
StoredStack getItem(UUID id);
|
||||||
|
|
||||||
int getStoredCount();
|
int getStoredCount();
|
||||||
int getCapacity();
|
int getCapacity();
|
||||||
|
|
||||||
@Nonnull
|
ItemStack insertItem(ItemStack item, boolean simulate);
|
||||||
ItemStack insertItem(@Nonnull ItemStack item, boolean simulate);
|
|
||||||
|
|
||||||
@Nonnull
|
default ItemStack extractItem(UUID id, int amount, boolean simulate) {
|
||||||
default ItemStack extractItem(int id, int amount, boolean simulate) {
|
|
||||||
return extractItem(id, amount, true, simulate);
|
return extractItem(id, amount, true, simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
ItemStack extractItem(UUID id, int amount, boolean obey_stack_size, boolean simulate);
|
||||||
ItemStack extractItem(int id, int amount, boolean obey_stack_size, boolean simulate);
|
|
||||||
|
|
||||||
// not extending INBTSerializable to avoid serializing it as forgecaps
|
// not extending INBTSerializable to avoid serializing it as forgecaps
|
||||||
CompoundTag serializeNBT();
|
CompoundTag serializeNBT();
|
||||||
|
@ -16,18 +16,13 @@ import java.util.*;
|
|||||||
|
|
||||||
public class MatteryDrive implements IMatteryDrive {
|
public class MatteryDrive implements IMatteryDrive {
|
||||||
protected final HashMap<Item, List<StoredStack>> items = new HashMap<>();
|
protected final HashMap<Item, List<StoredStack>> items = new HashMap<>();
|
||||||
protected final HashMap<Integer, StoredStack> items_by_id = new HashMap<>();
|
protected final HashMap<UUID, StoredStack> items_by_id = new HashMap<>();
|
||||||
|
|
||||||
protected boolean dirty = false;
|
protected boolean dirty = false;
|
||||||
protected int different_stacks = 0;
|
protected int different_stacks = 0;
|
||||||
protected int stored = 0;
|
protected int stored = 0;
|
||||||
protected int max_different_stacks;
|
protected int max_different_stacks;
|
||||||
protected int capacity;
|
protected int capacity;
|
||||||
protected int next_item_id = 0;
|
|
||||||
|
|
||||||
protected int getNextID() {
|
|
||||||
return next_item_id++;
|
|
||||||
}
|
|
||||||
|
|
||||||
public MatteryDrive(int capacity, int max_different_stacks) {
|
public MatteryDrive(int capacity, int max_different_stacks) {
|
||||||
this.capacity = capacity;
|
this.capacity = capacity;
|
||||||
@ -122,7 +117,7 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public StoredStack getItem(int id) {
|
public StoredStack getItem(UUID id) {
|
||||||
return items_by_id.get(id);
|
return items_by_id.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,7 +153,7 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
different_stacks++;
|
different_stacks++;
|
||||||
var copy = item.copy();
|
var copy = item.copy();
|
||||||
copy.setCount(max_insert);
|
copy.setCount(max_insert);
|
||||||
var state = new StoredStack(copy, getNextID());
|
var state = new StoredStack(copy, UUID.randomUUID());
|
||||||
listing.add(state);
|
listing.add(state);
|
||||||
items_by_id.put(state.id(), state);
|
items_by_id.put(state.id(), state);
|
||||||
markDirty();
|
markDirty();
|
||||||
@ -171,7 +166,7 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
|
|
||||||
@Nonnull
|
@Nonnull
|
||||||
@Override
|
@Override
|
||||||
public ItemStack extractItem(int id, int amount, boolean obey_stack_size, boolean simulate) {
|
public ItemStack extractItem(UUID id, int amount, boolean obey_stack_size, boolean simulate) {
|
||||||
var get = items_by_id.get(id);
|
var get = items_by_id.get(id);
|
||||||
|
|
||||||
if (get == null)
|
if (get == null)
|
||||||
@ -204,7 +199,6 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
public CompoundTag serializeNBT() {
|
public CompoundTag serializeNBT() {
|
||||||
final var compound = new CompoundTag();
|
final var compound = new CompoundTag();
|
||||||
|
|
||||||
compound.putInt("next_item_id", next_item_id);
|
|
||||||
compound.putInt("capacity", capacity);
|
compound.putInt("capacity", capacity);
|
||||||
compound.putInt("max_different_stacks", max_different_stacks);
|
compound.putInt("max_different_stacks", max_different_stacks);
|
||||||
|
|
||||||
@ -224,7 +218,7 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
stack_list.add(stack_nbt);
|
stack_list.add(stack_nbt);
|
||||||
|
|
||||||
stack_nbt.putInt("count", stack.stack().getCount());
|
stack_nbt.putInt("count", stack.stack().getCount());
|
||||||
stack_nbt.putInt("id", stack.id());
|
stack_nbt.putLongArray("id", new long[] { stack.id().getMostSignificantBits(), stack.id().getLeastSignificantBits() });
|
||||||
|
|
||||||
if (stack.stack().getTag() != null) {
|
if (stack.stack().getTag() != null) {
|
||||||
stack_nbt.put("data", stack.stack().getTag());
|
stack_nbt.put("data", stack.stack().getTag());
|
||||||
@ -244,7 +238,6 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
stored = 0;
|
stored = 0;
|
||||||
different_stacks = 0;
|
different_stacks = 0;
|
||||||
|
|
||||||
next_item_id = nbt.getInt("next_item_id");
|
|
||||||
capacity = nbt.getInt("capacity");
|
capacity = nbt.getInt("capacity");
|
||||||
max_different_stacks = nbt.getInt("max_different_stacks");
|
max_different_stacks = nbt.getInt("max_different_stacks");
|
||||||
|
|
||||||
@ -263,7 +256,7 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
for (var _stack : stack_list) {
|
for (var _stack : stack_list) {
|
||||||
if (_stack instanceof CompoundTag stack) {
|
if (_stack instanceof CompoundTag stack) {
|
||||||
var count = stack.getInt("count");
|
var count = stack.getInt("count");
|
||||||
var id = stack.getInt("id");
|
var id = stack.getLongArray("id");
|
||||||
var data = stack.get("data");
|
var data = stack.get("data");
|
||||||
|
|
||||||
var itemstack = new ItemStack(item, count);
|
var itemstack = new ItemStack(item, count);
|
||||||
@ -274,7 +267,7 @@ public class MatteryDrive implements IMatteryDrive {
|
|||||||
|
|
||||||
stored += count;
|
stored += count;
|
||||||
different_stacks += 1;
|
different_stacks += 1;
|
||||||
var state = new StoredStack(itemstack, id);
|
var state = new StoredStack(itemstack, id.length == 2 ? new UUID(id[0], id[1]) : UUID.randomUUID());
|
||||||
map_list.add(state);
|
map_list.add(state);
|
||||||
items_by_id.put(state.id(), state);
|
items_by_id.put(state.id(), state);
|
||||||
}
|
}
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
package ru.dbotthepony.mc.otm.capability.drive;
|
|
||||||
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public record StoredStack(ItemStack stack, int id) {
|
|
||||||
}
|
|
@ -3,19 +3,16 @@ package ru.dbotthepony.mc.otm.menu;
|
|||||||
import net.minecraft.world.SimpleContainer;
|
import net.minecraft.world.SimpleContainer;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
import net.minecraft.world.entity.player.Inventory;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.inventory.MenuType;
|
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import ru.dbotthepony.mc.otm.Registry;
|
import ru.dbotthepony.mc.otm.Registry;
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityDriveViewer;
|
import ru.dbotthepony.mc.otm.block.entity.BlockEntityDriveViewer;
|
||||||
import ru.dbotthepony.mc.otm.block.entity.BlockEntityMatteryPowered;
|
|
||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability;
|
||||||
import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive;
|
import ru.dbotthepony.mc.otm.capability.drive.IMatteryDrive;
|
||||||
import ru.dbotthepony.mc.otm.capability.drive.NetworkedItemView;
|
import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView;
|
||||||
import ru.dbotthepony.mc.otm.menu.data.UUIDDataContainer;
|
import ru.dbotthepony.mc.otm.menu.data.UUIDDataContainer;
|
||||||
import ru.dbotthepony.mc.otm.menu.slot.MatterySlot;
|
import ru.dbotthepony.mc.otm.menu.slot.MatterySlot;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class DriveViewerMenu extends PoweredMatteryMenu {
|
public class DriveViewerMenu extends PoweredMatteryMenu {
|
||||||
public UUIDDataContainer view_uuid;
|
public UUIDDataContainer view_uuid;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package ru.dbotthepony.mc.otm.capability.drive;
|
package ru.dbotthepony.mc.otm.menu.data;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
@ -11,7 +11,6 @@ import net.minecraftforge.fmllegacy.network.PacketDistributor;
|
|||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||||
import ru.dbotthepony.mc.otm.network.MatteryNetworking;
|
import ru.dbotthepony.mc.otm.network.MatteryNetworking;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -19,9 +18,9 @@ import java.util.UUID;
|
|||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class NetworkedItemView {
|
public class NetworkedItemView {
|
||||||
record TrackedState(int id, int id_upstream, ItemStack stack) {
|
public record ViewedItem(int id, ItemStack stack, UUID id_upstream) {
|
||||||
TrackedState(int id, ItemStack stack) {
|
public ViewedItem(int id, ItemStack stack) {
|
||||||
this(id, 0, stack);
|
this(id, stack, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,7 +111,7 @@ public class NetworkedItemView {
|
|||||||
throw new IllegalStateException("Item tracker " + id + " already has stack with id of " + stack_id);
|
throw new IllegalStateException("Item tracker " + id + " already has stack with id of " + stack_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
get.state.put(stack_id, new TrackedState(stack_id, stack));
|
get.state.put(stack_id, new ViewedItem(stack_id, stack));
|
||||||
get.clearCache();
|
get.clearCache();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -194,11 +193,14 @@ public class NetworkedItemView {
|
|||||||
public final boolean remote;
|
public final boolean remote;
|
||||||
protected int next_stack_id = 0;
|
protected int next_stack_id = 0;
|
||||||
|
|
||||||
protected final HashMap<Integer, TrackedState> state = new HashMap<>();
|
protected final HashMap<Integer, ViewedItem> state = new HashMap<>();
|
||||||
protected final HashMap<Integer, TrackedState> upstream_state = new HashMap<>();
|
protected final HashMap<UUID, ViewedItem> upstream_state = new HashMap<>();
|
||||||
protected final ArrayList<Object> backlog = new ArrayList<>();
|
protected final ArrayList<Object> backlog = new ArrayList<>();
|
||||||
|
|
||||||
|
// normally, filled only on server
|
||||||
private static final HashMap<UUID, NetworkedItemView> TRACKERS_LOCAL = new HashMap<>();
|
private static final HashMap<UUID, NetworkedItemView> TRACKERS_LOCAL = new HashMap<>();
|
||||||
|
|
||||||
|
// normally, filled only on client
|
||||||
private static final HashMap<UUID, NetworkedItemView> TRACKERS_REMOTE = new HashMap<>();
|
private static final HashMap<UUID, NetworkedItemView> TRACKERS_REMOTE = new HashMap<>();
|
||||||
|
|
||||||
public static NetworkedItemView getLocal(UUID id) {
|
public static NetworkedItemView getLocal(UUID id) {
|
||||||
@ -248,11 +250,11 @@ public class NetworkedItemView {
|
|||||||
return view_cache = list;
|
return view_cache = list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addItem(ItemStack stack, int id_upstream) {
|
public void addItem(ItemStack stack, UUID id_upstream) {
|
||||||
if (upstream_state.containsKey(id_upstream))
|
if (upstream_state.containsKey(id_upstream))
|
||||||
throw new IllegalStateException("Already tracking ItemStack with upstream id " + id_upstream + "!");
|
throw new IllegalStateException("Already tracking ItemStack with upstream id " + id_upstream + "!");
|
||||||
|
|
||||||
var state = new TrackedState(next_stack_id++, id_upstream, stack);
|
var state = new ViewedItem(next_stack_id++, stack, id_upstream);
|
||||||
this.state.put(state.id, state);
|
this.state.put(state.id, state);
|
||||||
this.upstream_state.put(id_upstream, state);
|
this.upstream_state.put(id_upstream, state);
|
||||||
|
|
||||||
@ -263,7 +265,7 @@ public class NetworkedItemView {
|
|||||||
clearCache();
|
clearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeItem(int id_upstream, int new_count) {
|
public void changeItem(UUID id_upstream, int new_count) {
|
||||||
var get = upstream_state.get(id_upstream);
|
var get = upstream_state.get(id_upstream);
|
||||||
|
|
||||||
if (get == null)
|
if (get == null)
|
||||||
@ -278,7 +280,7 @@ public class NetworkedItemView {
|
|||||||
clearCache();
|
clearCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeItem(int id_upstream) {
|
public void removeItem(UUID id_upstream) {
|
||||||
var get = upstream_state.get(id_upstream);
|
var get = upstream_state.get(id_upstream);
|
||||||
|
|
||||||
if (get == null)
|
if (get == null)
|
||||||
@ -295,7 +297,6 @@ public class NetworkedItemView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
OverdriveThatMatters.LOGGER.info("Clear called");
|
|
||||||
clearCache();
|
clearCache();
|
||||||
upstream_state.clear();
|
upstream_state.clear();
|
||||||
state.clear();
|
state.clear();
|
||||||
@ -322,7 +323,6 @@ public class NetworkedItemView {
|
|||||||
|
|
||||||
for (var packet : backlog) {
|
for (var packet : backlog) {
|
||||||
MatteryNetworking.CHANNEL.send(consumer, packet);
|
MatteryNetworking.CHANNEL.send(consumer, packet);
|
||||||
OverdriveThatMatters.LOGGER.info("Send packet {}", packet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
backlog.clear();
|
backlog.clear();
|
@ -5,7 +5,7 @@ import net.minecraftforge.fmllegacy.network.NetworkDirection;
|
|||||||
import net.minecraftforge.fmllegacy.network.NetworkRegistry;
|
import net.minecraftforge.fmllegacy.network.NetworkRegistry;
|
||||||
import net.minecraftforge.fmllegacy.network.simple.SimpleChannel;
|
import net.minecraftforge.fmllegacy.network.simple.SimpleChannel;
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters;
|
||||||
import ru.dbotthepony.mc.otm.capability.drive.NetworkedItemView;
|
import ru.dbotthepony.mc.otm.menu.data.NetworkedItemView;
|
||||||
import ru.dbotthepony.mc.otm.network.android.*;
|
import ru.dbotthepony.mc.otm.network.android.*;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
Loading…
Reference in New Issue
Block a user