Skip to content

Commit

Permalink
Almost Done
Browse files Browse the repository at this point in the history
  • Loading branch information
shartte committed Aug 16, 2024
1 parent 99a6f06 commit 1ee268c
Show file tree
Hide file tree
Showing 8 changed files with 96 additions and 87 deletions.
37 changes: 32 additions & 5 deletions src/main/java/io/github/projectet/ae2things/AE2Things.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
package io.github.projectet.ae2things;

import appeng.api.config.FuzzyMode;
import appeng.api.ids.AECreativeTabIds;
import appeng.api.storage.StorageCells;
import appeng.api.upgrades.Upgrades;
import appeng.core.definitions.AEItems;
import com.mojang.serialization.Codec;
import io.github.projectet.ae2things.client.AE2ThingsClient;
import io.github.projectet.ae2things.command.Command;
import io.github.projectet.ae2things.item.AETItems;
import io.github.projectet.ae2things.storage.DISKCellHandler;
import io.github.projectet.ae2things.util.StorageManager;

import net.minecraft.core.UUIDUtil;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.neoforged.api.distmarker.Dist;
Expand All @@ -17,10 +25,8 @@
import net.neoforged.neoforge.event.tick.LevelTickEvent;
import net.neoforged.neoforge.registries.DeferredRegister;

import appeng.api.ids.AECreativeTabIds;
import appeng.api.storage.StorageCells;
import appeng.api.upgrades.Upgrades;
import appeng.core.definitions.AEItems;
import java.util.UUID;
import java.util.function.Consumer;

@Mod(AE2Things.MOD_ID)
public class AE2Things {
Expand All @@ -31,12 +37,25 @@ public class AE2Things {

public static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(MOD_ID);

public static final DeferredRegister.DataComponents COMPONENTS = DeferredRegister.createDataComponents(MOD_ID);

public static final DataComponentType<UUID> DATA_DISK_ID = registerDataComponentType("disk_id", builder -> {
builder.persistent(UUIDUtil.CODEC).networkSynchronized(UUIDUtil.STREAM_CODEC);
});
public static final DataComponentType<Long> DATA_DISK_ITEM_COUNT = registerDataComponentType("disk_item_count", builder -> {
builder.persistent(Codec.LONG).networkSynchronized(ByteBufCodecs.VAR_LONG);
});
public static final DataComponentType<FuzzyMode> DATA_FUZZY_MODE = registerDataComponentType("fuzzy_mode", builder -> {
builder.persistent(FuzzyMode.CODEC).networkSynchronized(FuzzyMode.STREAM_CODEC);
});

public static ResourceLocation id(String path) {
return ResourceLocation.fromNamespaceAndPath(MOD_ID, path);
}

public AE2Things(IEventBus modEventBus, Dist dist) {
ITEMS.register(modEventBus);
COMPONENTS.register(modEventBus);

AETItems.init();

Expand Down Expand Up @@ -84,4 +103,12 @@ public static void worldTick(LevelTickEvent.Pre event) {
STORAGE_INSTANCE = StorageManager.getInstance(serverLevel.getServer());
}
}

private static <T> DataComponentType<T> registerDataComponentType(String name, Consumer<DataComponentType.Builder<T>> customizer) {
var builder = DataComponentType.<T>builder();
customizer.accept(builder);
var componentType = builder.build();
COMPONENTS.register(name, () -> componentType);
return componentType;
}
}
24 changes: 9 additions & 15 deletions src/main/java/io/github/projectet/ae2things/command/Command.java
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
package io.github.projectet.ae2things.command;

import java.util.UUID;

import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.tree.LiteralCommandNode;

import io.github.projectet.ae2things.AE2Things;
import io.github.projectet.ae2things.item.AETItems;
import io.github.projectet.ae2things.storage.DISKCellInventory;
import io.github.projectet.ae2things.storage.IDISKCellItem;
import io.github.projectet.ae2things.util.Constants;

import net.minecraft.ChatFormatting;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.arguments.UuidArgument;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.ClickEvent;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.HoverEvent;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.neoforged.neoforge.event.RegisterCommandsEvent;

import java.util.UUID;

public class Command {

public static void commandRegister(RegisterCommandsEvent event) {
Expand Down Expand Up @@ -52,10 +47,10 @@ public static void commandRegister(RegisterCommandsEvent event) {
private static int help(CommandContext<CommandSourceStack> context) {
context.getSource().sendSuccess(() -> Component.literal("Available Argument(s): "), false);
context.getSource().sendSuccess(() -> Component.literal(
"/ae2things recover <UUID> - Spawns a drive with the given UUID, if it doesn't exist, does not spawn any item."),
"/ae2things recover <UUID> - Spawns a drive with the given UUID, if it doesn't exist, does not spawn any item."),
false);
context.getSource().sendSuccess(() -> Component.literal(
"/ae2things getuuid - Gets the UUID of the drive in the player's hand if it has a UUID. Returns the DISKS uuid."),
"/ae2things getuuid - Gets the UUID of the drive in the player's hand if it has a UUID. Returns the DISKS uuid."),
false);
return 0;
}
Expand All @@ -65,11 +60,9 @@ private static int spawnDrive(CommandContext<CommandSourceStack> context, UUID u

if (AE2Things.STORAGE_INSTANCE.hasUUID(uuid)) {
ItemStack stack = new ItemStack(AETItems.DISK_DRIVE_256K.get());
CompoundTag nbt = new CompoundTag();

nbt.putUUID(Constants.DISKUUID, uuid);
nbt.putLong(DISKCellInventory.ITEM_COUNT_TAG, AE2Things.STORAGE_INSTANCE.getOrCreateDisk(uuid).itemCount);
stack.setTag(nbt);
stack.set(AE2Things.DATA_DISK_ID, uuid);
stack.set(AE2Things.DATA_DISK_ITEM_COUNT, AE2Things.STORAGE_INSTANCE.getOrCreateDisk(uuid).itemCount);

player.addItem(stack);

Expand All @@ -87,8 +80,9 @@ private static int getUUID(CommandContext<CommandSourceStack> context) throws Co
Player player = context.getSource().getPlayerOrException();
ItemStack mainStack = player.getMainHandItem();
if (mainStack.getItem() instanceof IDISKCellItem) {
if (mainStack.hasTag() && mainStack.getTag().contains(Constants.DISKUUID)) {
Component text = copyToClipboard(mainStack.getTag().getUUID(Constants.DISKUUID).toString());
var diskId = mainStack.get(AE2Things.DATA_DISK_ID);
if (diskId != null) {
Component text = copyToClipboard(diskId.toString());
context.getSource().sendSuccess(() -> Component.translatable("command.ae2things.getuuid_success", text),
false);
return 0;
Expand Down
15 changes: 4 additions & 11 deletions src/main/java/io/github/projectet/ae2things/item/DISKDrive.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.List;
import java.util.Set;

import io.github.projectet.ae2things.AE2Things;
import org.jetbrains.annotations.Nullable;

import io.github.projectet.ae2things.storage.DISKCellHandler;
Expand Down Expand Up @@ -74,20 +75,12 @@ public ConfigInventory getConfigInventory(ItemStack is) {

@Override
public FuzzyMode getFuzzyMode(final ItemStack is) {
final String fz = is.getOrCreateTag().getString("FuzzyMode");
if (fz.isEmpty()) {
return FuzzyMode.IGNORE_ALL;
}
try {
return FuzzyMode.valueOf(fz);
} catch (final Throwable t) {
return FuzzyMode.IGNORE_ALL;
}
return is.getOrDefault(AE2Things.DATA_FUZZY_MODE, FuzzyMode.IGNORE_ALL);
}

@Override
public void setFuzzyMode(final ItemStack is, final FuzzyMode fzMode) {
is.getOrCreateTag().putString("FuzzyMode", fzMode.name());
is.set(AE2Things.DATA_FUZZY_MODE, fzMode);
}

@Override
Expand Down Expand Up @@ -143,7 +136,7 @@ public InteractionResult onItemUseFirst(ItemStack stack, UseOnContext context) {
}

@Override
public void appendHoverText(ItemStack stack, @Nullable Level world, List<Component> tooltip, TooltipFlag context) {
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltip, TooltipFlag tooltipFlag) {
tooltip.add(Component.literal("Deep Item Storage disK - Storage for dummies")
.withStyle(ChatFormatting.DARK_GRAY, ChatFormatting.ITALIC));
addCellInformationToTooltip(stack, tooltip);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,22 @@
package io.github.projectet.ae2things.mixin;

import java.util.UUID;

import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import io.github.projectet.ae2things.AE2Things;
import io.github.projectet.ae2things.storage.DISKCellInventory;
import io.github.projectet.ae2things.util.Constants;
import io.github.projectet.ae2things.util.DataStorage;

import net.minecraft.core.NonNullList;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.AbstractContainerMenu;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Slice;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.UUID;

@Mixin(AbstractContainerMenu.class)
public abstract class CursedInternalSlotMixin {
Expand All @@ -32,13 +28,14 @@ public abstract class CursedInternalSlotMixin {
@Inject(method = "doClick", at = @At(value = "INVOKE", target = "net/minecraft/world/item/ItemStack.copyWithCount (I)Lnet/minecraft/world/item/ItemStack;"), slice = @Slice(from = @At(value = "INVOKE", target = "net/minecraft/world/inventory/Slot.hasItem()Z", ordinal = 1)), cancellable = true)
public void CLONE(int slotIndex, int button, ClickType actionType, Player player, CallbackInfo ci) {
Slot i = this.slots.get(slotIndex);
if (DISKCellInventory.hasDiskUUID(i.getItem())) {
DataStorage storage = AE2Things.STORAGE_INSTANCE
.getOrCreateDisk(i.getItem().getOrCreateTag().getUUID(Constants.DISKUUID));

var diskId = i.getItem().get(AE2Things.DATA_DISK_ID);
if (diskId != null) {
DataStorage storage = AE2Things.STORAGE_INSTANCE.getOrCreateDisk(diskId);
ItemStack newStack = new ItemStack(i.getItem().getItem());
UUID id = UUID.randomUUID();
newStack.getOrCreateTag().putUUID(Constants.DISKUUID, id);
newStack.getOrCreateTag().putLong(DISKCellInventory.ITEM_COUNT_TAG, storage.itemCount);
newStack.set(AE2Things.DATA_DISK_ID, id);
newStack.set(AE2Things.DATA_DISK_ITEM_COUNT, storage.itemCount);
AE2Things.STORAGE_INSTANCE.updateDisk(id, storage);

newStack.setCount(newStack.getMaxStackSize());
Expand Down
Loading

0 comments on commit 1ee268c

Please sign in to comment.