Added /createdisk command which creates a disk based on the disk ID. Fixes #1817

This commit is contained in:
raoulvdberge
2018-06-15 12:01:32 +02:00
parent 50e94ead18
commit 7d13256d78
6 changed files with 114 additions and 4 deletions

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage;
import com.raoulvdberge.refinedstorage.command.CommandCreateDisk;
import com.raoulvdberge.refinedstorage.proxy.ProxyCommon;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack;
@@ -9,10 +10,7 @@ import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLFingerprintViolationEvent;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.*;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
@@ -60,6 +58,11 @@ public final class RS {
PROXY.postInit(e);
}
@EventHandler
public void onServerStarting(FMLServerStartingEvent e) {
e.registerServerCommand(new CommandCreateDisk());
}
@EventHandler
public void onFingerprintViolation(FMLFingerprintViolationEvent e) {
FMLLog.bigWarning("Invalid fingerprint detected for the Refined Storage jar file! The file " + e.getSource().getName() + " may have been tampered with. This version will NOT be supported!");

View File

@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.storage.disk;
import net.minecraft.item.ItemStack;
import javax.annotation.Nullable;
import java.util.Map;
import java.util.UUID;
/**
@@ -27,6 +28,11 @@ public interface IStorageDiskManager {
@Nullable
IStorageDisk getByStack(ItemStack disk);
/**
* @return a map of all storage disks
*/
Map<UUID, IStorageDisk> getAll();
/**
* Sets a storage disk.
*

View File

@@ -56,6 +56,11 @@ public class StorageDiskManager extends WorldSavedData implements IStorageDiskMa
return get(provider.getId(disk));
}
@Override
public Map<UUID, IStorageDisk> getAll() {
return disks;
}
@Override
public void set(UUID id, IStorageDisk disk) {
if (id == null) {

View File

@@ -0,0 +1,90 @@
package com.raoulvdberge.refinedstorage.command;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDisk;
import com.raoulvdberge.refinedstorage.api.storage.disk.IStorageDiskProvider;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.command.WrongUsageException;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
public class CommandCreateDisk extends CommandBase {
@Override
public String getName() {
return "createdisk";
}
@Override
public String getUsage(ICommandSender sender) {
return "commands.refinedstorage.createdisk.usage";
}
@Override
public int getRequiredPermissionLevel() {
return 2;
}
@Override
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
if (args.length < 4) {
throw new WrongUsageException("commands.refinedstorage.createdisk.usage");
} else {
EntityPlayer player = getPlayer(server, sender, args[0]);
Item item = getItemByText(sender, args[1]);
int metadata = parseInt(args[2]);
UUID id;
try {
id = UUID.fromString(args[3]);
} catch (IllegalArgumentException e) {
throw new CommandException("commands.refinedstorage.createdisk.error.diskNotFound", args[3]);
}
if (!(item instanceof IStorageDiskProvider)) {
throw new CommandException("commands.refinedstorage.createdisk.error.notADisk");
}
IStorageDisk disk = API.instance().getStorageDiskManager(sender.getEntityWorld()).get(id);
if (disk == null) {
throw new CommandException("commands.refinedstorage.createdisk.error.diskNotFound", args[3]);
}
ItemStack diskStack = new ItemStack(item, 1, metadata);
((IStorageDiskProvider) item).setId(diskStack, id);
if (player.inventory.addItemStackToInventory(diskStack)) {
// From CommandGive
player.world.playSound(null, player.posX, player.posY, player.posZ, SoundEvents.ENTITY_ITEM_PICKUP, SoundCategory.PLAYERS, 0.2F, ((player.getRNG().nextFloat() - player.getRNG().nextFloat()) * 0.7F + 1.0F) * 2.0F);
player.inventoryContainer.detectAndSendChanges();
}
notifyCommandListener(sender, this, "commands.refinedstorage.createdisk.success", args[3], player.getName());
}
}
@Override
public List<String> getTabCompletions(MinecraftServer server, ICommandSender sender, String[] args, @Nullable BlockPos targetPos) {
if (args.length == 1) {
return getListOfStringsMatchingLastWord(args, server.getOnlinePlayerNames());
} else if (args.length == 2) {
return getListOfStringsMatchingLastWord(args, Item.REGISTRY.getKeys());
} else if (args.length == 4) {
return getListOfStringsMatchingLastWord(args, API.instance().getStorageDiskManager(sender.getEntityWorld()).getAll().keySet().stream().map(UUID::toString).collect(Collectors.toList()));
}
return Collections.emptyList();
}
}

View File

@@ -297,6 +297,11 @@ item.refinedstorage:network_card.name=Network Card
item.refinedstorage:security_card.name=Security Card
item.refinedstorage:security_card.owner=Bound to: %s
commands.refinedstorage.createdisk.usage=/createdisk <player> <item> <metadata> <id>
commands.refinedstorage.createdisk.error.notADisk=The given disk item is not a disk.
commands.refinedstorage.createdisk.error.diskNotFound=Disk %s was not found.
commands.refinedstorage.createdisk.success=Successfully gave disk %s to %s.
advancements.refinedstorage:controlling.description=Craft a Controller
advancements.refinedstorage:connecting=Connecting
advancements.refinedstorage:connecting.description=You can place all the devices next to each other to connect them up, or, use Cable