Added satellite managing commands, fixed some satellite map storage stuff

This commit is contained in:
Toshayo 2023-07-24 14:06:46 +02:00
parent a22a68744c
commit ccb91d98bf
No known key found for this signature in database
GPG Key ID: 7DC46644B561B1B4
6 changed files with 108 additions and 10 deletions

View File

@ -0,0 +1,87 @@
package com.hbm.commands;
import com.hbm.items.ISatChip;
import com.hbm.items.ModItems;
import com.hbm.saveddata.SatelliteSavedData;
import com.hbm.saveddata.satellites.Satellite;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.EnumChatFormatting;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class CommandSatellites extends CommandBase {
@Override
public String getCommandName() {
return "ntmsatellites";
}
@Override
public String getCommandUsage(ICommandSender iCommandSender) {
return String.format(
"%s/%s orbit %s- Launch the held satellite\n" +
"%s/%s descend <frequency> %s- Deletes satellite by frequency.",
EnumChatFormatting.GREEN, getCommandName(), EnumChatFormatting.LIGHT_PURPLE,
EnumChatFormatting.GREEN, getCommandName(), EnumChatFormatting.LIGHT_PURPLE
);
}
@Override
public void processCommand(ICommandSender sender, String[] args) {
if(!(sender instanceof EntityPlayer)) {
sender.addChatMessage(new ChatComponentTranslation( "commands.satellite.should_be_run_as_player").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
return;
}
switch (args[0]) {
case "orbit":
EntityPlayer player = getCommandSenderAsPlayer(sender);
if(player.getHeldItem().getItem() instanceof ISatChip && player.getHeldItem().getItem() != ModItems.sat_chip) {
Satellite.orbit(
player.worldObj,
Satellite.getIDFromItem(player.getHeldItem().getItem()),
ISatChip.getFreqS(player.getHeldItem()),
player.posX, player.posY, player.posZ
);
player.getHeldItem().stackSize -= 1;
sender.addChatMessage(new ChatComponentTranslation("commands.satellite.satellite_orbited").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN)));
} else {
sender.addChatMessage(new ChatComponentTranslation("commands.satellite.not_a_satellite").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
}
break;
case "descend":
int freq = parseInt(sender, args[1]);
SatelliteSavedData data = SatelliteSavedData.getData(sender.getEntityWorld());
if(data.sats.containsKey(freq)) {
data.sats.remove(freq);
data.markDirty();
sender.addChatMessage(new ChatComponentTranslation( "commands.satellite.satellite_descended").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.GREEN)));
} else {
sender.addChatMessage(new ChatComponentTranslation( "commands.satellite.no_satellite").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.RED)));
}
break;
}
}
@SuppressWarnings("rawtypes")
@Override
public List addTabCompletionOptions(ICommandSender sender, String[] args) {
if(!(sender instanceof EntityPlayer)) {
return Collections.emptyList();
}
if(args.length < 1) {
return Collections.emptyList();
}
if(args.length == 1) {
return getListOfStringsMatchingLastWord(args, "orbit", "descend");
}
if (args[0].equals("descend")) {
return getListOfStringsFromIterableMatchingLastWord(args, SatelliteSavedData.getData(sender.getEntityWorld()).sats.keySet().stream().map(String::valueOf).collect(Collectors.toList()));
}
return Collections.emptyList();
}
}

View File

@ -1,5 +1,6 @@
package com.hbm.main;
import com.hbm.commands.CommandSatellites;
import net.minecraft.block.BlockDispenser;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.dispenser.BehaviorDefaultDispenseItem;
@ -926,6 +927,7 @@ public class MainRegistry {
SiegeOrchestrator.createGameRules(world);
event.registerServerCommand(new CommandReloadRecipes());
event.registerServerCommand(new CommandDebugChunkLoad());
event.registerServerCommand(new CommandSatellites());
}
@EventHandler

View File

@ -12,6 +12,17 @@ public class SatelliteSavedData extends WorldSavedData {
public final HashMap<Integer, Satellite> sats = new HashMap<>();
/**
* Constructor used for deserialization
* @param name - Map data name
*/
public SatelliteSavedData(String name) {
super(name);
}
/**
* Default constructor for satellites map data.
*/
public SatelliteSavedData() {
super("satellites");
this.markDirty();
@ -62,7 +73,6 @@ public class SatelliteSavedData extends WorldSavedData {
worldObj.perWorldStorage.setData("satellites", new SatelliteSavedData());
data = (SatelliteSavedData)worldObj.perWorldStorage.loadData(SatelliteSavedData.class, "satellites");
data.markDirty();
}
return data;

View File

@ -28,8 +28,6 @@ import net.minecraft.world.World;
import java.util.List;
public class TileEntityMachineSatDock extends TileEntity implements ISidedInventory, IGUIProvider {
private SatelliteSavedData data;
private ItemStack[] slots;
private static final int[] access = new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14};
@ -182,8 +180,7 @@ public class TileEntityMachineSatDock extends TileEntity implements ISidedInvent
@Override
public void updateEntity() {
if (!worldObj.isRemote) {
if (data == null)
data = SatelliteSavedData.getData(worldObj);
SatelliteSavedData data = SatelliteSavedData.getData(worldObj);
if (slots[15] != null) {
int freq = ISatChip.getFreqS(slots[15]);

View File

@ -19,8 +19,6 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class TileEntityMachineSatLinker extends TileEntity implements ISidedInventory, IGUIProvider {
private SatelliteSavedData satelliteData;
private ItemStack[] slots;
//public static final int maxFill = 64 * 3;
@ -176,9 +174,7 @@ public class TileEntityMachineSatLinker extends TileEntity implements ISidedInve
}
if(slots[2] != null && slots[2].getItem() instanceof ISatChip) {
if(satelliteData == null) {
satelliteData = SatelliteSavedData.getData(worldObj);
}
SatelliteSavedData satelliteData = SatelliteSavedData.getData(worldObj);
int newId = worldObj.rand.nextInt(100000);
if(!satelliteData.isFreqTaken(newId)) {
ISatChip.setFreqS(slots[2], newId);

View File

@ -604,6 +604,12 @@ chem.XENON=Linde Xenon Cycle
chem.XENON_OXY=Boosted Linde Xenon Cycle
chem.YELLOWCAKE=Yellowcake Production
commands.satellite.no_satellite=No satellite using this frequency found!
commands.satellite.not_a_satellite=The held item is not a satellite!
commands.satellite.satellite_descended=Satellite successfully descended.
commands.satellite.satellite_orbited=Satellite launched.
commands.satellite.should_be_run_as_player=This command should be run by a player!
container.amsBase=AMS Base (Deco)
container.amsEmitter=AMS Emitter (Deco)
container.amsLimiter=AMS Stabilizer (Deco)