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

@@ -12,6 +12,7 @@ NOTE: Worlds that used Refined Storage 1.5.x are fully compatible with Refined S
- Rewrote autocrafting (raoulvdberge) - Rewrote autocrafting (raoulvdberge)
- Autocrafting tasks that take longer than 5 seconds to calculate are automatically stopped to avoid server strain (raoulvdberge) - Autocrafting tasks that take longer than 5 seconds to calculate are automatically stopped to avoid server strain (raoulvdberge)
- Added new storage disk system where the storage disk data (items, fluids) are stored off the disk itself, in another file (refinedstorage_disks.dat). The disk itself only stores its ID (raoulvdberge) - Added new storage disk system where the storage disk data (items, fluids) are stored off the disk itself, in another file (refinedstorage_disks.dat). The disk itself only stores its ID (raoulvdberge)
- Added /createdisk command which creates a disk based on the disk ID. Turn on advanced tooltips to see the disk ID on a disk item (raoulvdberge)
- Changed fluid storage progression to be 64k - 256k - 1024k - 4096k (raoulvdberge) - Changed fluid storage progression to be 64k - 256k - 1024k - 4096k (raoulvdberge)
- You can no longer put a Filter in filter slots to gain additional filter slots (raoulvdberge) - You can no longer put a Filter in filter slots to gain additional filter slots (raoulvdberge)
- You can now re-insert Processing Patterns in the Pattern Grid and have the inputs and outputs be completed (raoulvdberge) - You can now re-insert Processing Patterns in the Pattern Grid and have the inputs and outputs be completed (raoulvdberge)

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage; package com.raoulvdberge.refinedstorage;
import com.raoulvdberge.refinedstorage.command.CommandCreateDisk;
import com.raoulvdberge.refinedstorage.proxy.ProxyCommon; import com.raoulvdberge.refinedstorage.proxy.ProxyCommon;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.ItemStack; 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.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLFingerprintViolationEvent; import net.minecraftforge.fml.common.event.*;
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.network.NetworkRegistry; import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
@@ -60,6 +58,11 @@ public final class RS {
PROXY.postInit(e); PROXY.postInit(e);
} }
@EventHandler
public void onServerStarting(FMLServerStartingEvent e) {
e.registerServerCommand(new CommandCreateDisk());
}
@EventHandler @EventHandler
public void onFingerprintViolation(FMLFingerprintViolationEvent e) { 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!"); 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 net.minecraft.item.ItemStack;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
/** /**
@@ -27,6 +28,11 @@ public interface IStorageDiskManager {
@Nullable @Nullable
IStorageDisk getByStack(ItemStack disk); IStorageDisk getByStack(ItemStack disk);
/**
* @return a map of all storage disks
*/
Map<UUID, IStorageDisk> getAll();
/** /**
* Sets a storage disk. * Sets a storage disk.
* *

View File

@@ -56,6 +56,11 @@ public class StorageDiskManager extends WorldSavedData implements IStorageDiskMa
return get(provider.getId(disk)); return get(provider.getId(disk));
} }
@Override
public Map<UUID, IStorageDisk> getAll() {
return disks;
}
@Override @Override
public void set(UUID id, IStorageDisk disk) { public void set(UUID id, IStorageDisk disk) {
if (id == null) { 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.name=Security Card
item.refinedstorage:security_card.owner=Bound to: %s 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:controlling.description=Craft a Controller
advancements.refinedstorage:connecting=Connecting 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 advancements.refinedstorage:connecting.description=You can place all the devices next to each other to connect them up, or, use Cable