Skip to content

Commit

Permalink
emc transportation on importer/exporter
Browse files Browse the repository at this point in the history
  • Loading branch information
PTOM76 committed Sep 20, 2024
1 parent fd5405b commit 5cedb78
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 6 deletions.
2 changes: 2 additions & 0 deletions src/main/java/net/pitan76/itemalchemy/data/ServerState.java
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ public static ServerState getServerState(MinecraftServer server) {
}

public static ServerState of(MinecraftServer server) {
if (server == null) return null;

return getServerState(server);
}

Expand Down
37 changes: 34 additions & 3 deletions src/main/java/net/pitan76/itemalchemy/tile/EMCExporterTile.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,13 @@

public class EMCExporterTile extends OwnedBlockEntity implements ExtendBlockEntityTicker<EMCExporterTile>, SidedInventory, IInventory, ExtendedScreenHandlerFactory {

public static int MAX_STACK_COUNT = 4096;

public DefaultedList<ItemStack> filter = DefaultedList.ofSize(9, ItemStackUtil.empty());
public String ownerName = "";

public long oldStoredEMC = -1;

public EMCExporterTile(BlockEntityType<?> type, TileCreateEvent e) {
super(type, e);
}
Expand All @@ -40,10 +44,10 @@ public EMCExporterTile(TileCreateEvent e) {
this(Tiles.EMC_EXPORTER.getOrNull(), e);
}

public static int maxStackCount = 4096;

@Override
public void writeNbt(WriteNbtArgs args) {
super.writeNbt(args);

NbtCompound filterNbt = NbtUtil.create();
InventoryUtil.writeNbt(args.registryLookup, filterNbt, filter);
NbtUtil.put(args.nbt, "filter", filterNbt);
Expand All @@ -57,6 +61,8 @@ public void writeNbt(WriteNbtArgs args) {

@Override
public void readNbt(ReadNbtArgs args) {
super.readNbt(args);

if (NbtUtil.has(args.nbt, "filter")) {
NbtCompound filterNbt = NbtUtil.get(args.nbt, "filter");
InventoryUtil.readNbt(args.registryLookup, filterNbt, filter);
Expand All @@ -77,7 +83,17 @@ public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity pl

@Override
public void tick(TileTickEvent<EMCExporterTile> e) {
if (oldStoredEMC != -1 && oldStoredEMC == storedEMC) return;
if (!hasTeam()) return;

@SuppressWarnings("OptionalGetWithoutIsPresent")
TeamState teamState = getTeamState().get();
if (oldStoredEMC != -1)
teamState.storedEMC -= oldStoredEMC - storedEMC;

storedEMC = Math.min(teamState.storedEMC, getMaxEMC());
oldStoredEMC = storedEMC;
markDirty();
}

@Override
Expand Down Expand Up @@ -122,7 +138,7 @@ public DefaultedList<ItemStack> getItems() {
if (!teamState.registeredItems.contains(ItemUtil.toCompatID(filterStack.getItem()).toString())) continue;

ItemStack stack = filterStack.copy();
stack.setCount(Math.min((int) Math.floorDiv(aveEMC, neededEMC), maxStackCount));
stack.setCount(Math.min((int) Math.floorDiv(aveEMC, neededEMC), MAX_STACK_COUNT));

result.set(i, stack);
}
Expand Down Expand Up @@ -189,4 +205,19 @@ public void writeExtraData(ExtraDataArgs args) {

args.writeVar(data);
}

@Override
public long getMaxEMC() {
return 500_000;
}

@Override
public boolean canExtract() {
return true;
}

@Override
public boolean canInsert() {
return false;
}
}
32 changes: 31 additions & 1 deletion src/main/java/net/pitan76/itemalchemy/tile/EMCImporterTile.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
import net.pitan76.itemalchemy.EMCManager;
import net.pitan76.itemalchemy.api.EMCStorageUtil;
import net.pitan76.itemalchemy.data.TeamState;
import net.pitan76.itemalchemy.gui.screen.EMCImporterScreenHandler;
import net.pitan76.itemalchemy.tile.base.OwnedBlockEntity;
Expand Down Expand Up @@ -44,6 +45,8 @@ public EMCImporterTile(TileCreateEvent e) {

@Override
public void writeNbt(WriteNbtArgs args) {
super.writeNbt(args);

NbtCompound filterNbt = NbtUtil.create();
InventoryUtil.writeNbt(args.registryLookup, filterNbt, filter);

Expand All @@ -62,6 +65,8 @@ public void writeNbt(WriteNbtArgs args) {

@Override
public void readNbt(ReadNbtArgs args) {
super.readNbt(args);

if (NbtUtil.has(args.nbt, "filter")) {
NbtCompound filterNbt = NbtUtil.get(args.nbt, "filter");
InventoryUtil.readNbt(args.registryLookup, filterNbt, filter);
Expand Down Expand Up @@ -89,8 +94,18 @@ public ScreenHandler createMenu(int syncId, PlayerInventory inv, PlayerEntity pl
public void tick(TileTickEvent<EMCImporterTile> e) {
World world = e.world;
if (WorldUtil.isClient(world)) return;

if (!hasTeam()) return;

EMCStorageUtil.transferAllEMC(this);
if (storedEMC > 0) {
@SuppressWarnings("OptionalGetWithoutIsPresent")
TeamState teamState = getTeamState().get();

teamState.storedEMC += storedEMC;
storedEMC = 0;
markDirty();
}

if (inv.get(0).isEmpty()) return;

ItemStack stack = inv.get(0);
Expand Down Expand Up @@ -197,4 +212,19 @@ public void writeExtraData(ExtraDataArgs args) {

args.writeVar(data);
}

@Override
public long getMaxEMC() {
return 30_000;
}

@Override
public boolean canExtract() {
return false;
}

@Override
public boolean canInsert() {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,11 @@
import net.pitan76.itemalchemy.data.TeamState;
import net.pitan76.mcpitanlib.api.entity.Player;
import net.pitan76.mcpitanlib.api.event.block.TileCreateEvent;
import net.pitan76.mcpitanlib.api.tile.CompatBlockEntity;

import java.util.Optional;
import java.util.UUID;

public class OwnedBlockEntity extends CompatBlockEntity {
public abstract class OwnedBlockEntity extends EMCStorageBlockEntity {

public UUID teamUUID = null;

Expand All @@ -26,6 +25,8 @@ public OwnedBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state)
}

public Optional<TeamState> getTeamState() {
if (getWorld() == null) return Optional.empty();

ServerState serverState = ServerState.of(getWorld());
if (serverState == null || teamUUID == null)
return Optional.empty();
Expand Down

0 comments on commit 5cedb78

Please sign in to comment.