CarryOn/src/main/java/tschipp/carryon/common/command/CommandCarryOn.java
2020-09-06 23:55:49 +02:00

143 lines
6.0 KiB
Java

package tschipp.carryon.common.command;
import java.util.Collection;
import java.util.Collections;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import net.minecraft.command.CommandSource;
import net.minecraft.command.Commands;
import net.minecraft.command.arguments.EntityArgument;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.fml.network.PacketDistributor;
import tschipp.carryon.CarryOn;
import tschipp.carryon.common.config.Configs.Settings;
import tschipp.carryon.common.handler.CustomPickupOverrideHandler;
import tschipp.carryon.common.handler.ModelOverridesHandler;
import tschipp.carryon.common.handler.RegistrationHandler;
import tschipp.carryon.common.item.ItemCarryonEntity;
import tschipp.carryon.common.item.ItemCarryonBlock;
import tschipp.carryon.common.scripting.ScriptReader;
import tschipp.carryon.network.client.CarrySlotPacket;
import tschipp.carryon.network.client.ScriptReloadPacket;
public class CommandCarryOn
{
public static void register(CommandDispatcher<CommandSource> dispatcher)
{
LiteralArgumentBuilder<CommandSource> builder = Commands.literal("carryon")
.then(Commands.literal("debug").executes((cmd) -> {
return handleDebug(cmd.getSource());
}))
.then(Commands.literal("clear").executes((cmd) -> {
return handleClear(cmd.getSource(), Collections.singleton(cmd.getSource().asPlayer()));
}))
.then(Commands.literal("clear").then(Commands.argument("target", EntityArgument.players()).requires(src -> src.hasPermissionLevel(2)).executes((cmd) -> {
return handleClear(cmd.getSource(), EntityArgument.getPlayers(cmd, "target"));
})))
;
dispatcher.register(builder);
}
private static int handleDebug(CommandSource source)
{
try
{
if (source.assertIsEntity() != null)
{
ServerPlayerEntity player = source.asPlayer();
ItemStack main = player.getHeldItemMainhand();
if (!main.isEmpty() && main.getItem() == RegistrationHandler.itemTile)
{
source.sendFeedback(new StringTextComponent("Block: " + ItemCarryonBlock.getBlock(main)), true);
source.sendFeedback(new StringTextComponent("BlockState: " + ItemCarryonBlock.getBlockState(main)), true);
source.sendFeedback(new StringTextComponent("ItemStack: " + ItemCarryonBlock.getItemStack(main)), true);
if (ModelOverridesHandler.hasCustomOverrideModel(ItemCarryonBlock.getBlockState(main), ItemCarryonBlock.getTileData(main)))
source.sendFeedback(new StringTextComponent("Override Model: " + ModelOverridesHandler.getOverrideObject(ItemCarryonBlock.getBlockState(main), ItemCarryonBlock.getTileData(main))), true);
if (CustomPickupOverrideHandler.hasSpecialPickupConditions(ItemCarryonBlock.getBlockState(main)))
source.sendFeedback(new StringTextComponent("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonBlock.getBlockState(main))), true);
CarryOn.LOGGER.info("Block: " + ItemCarryonBlock.getBlock(main));
CarryOn.LOGGER.info("BlockState: " + ItemCarryonBlock.getBlockState(main));
CarryOn.LOGGER.info("ItemStack: " + ItemCarryonBlock.getItemStack(main));
if (ModelOverridesHandler.hasCustomOverrideModel(ItemCarryonBlock.getBlockState(main), ItemCarryonBlock.getTileData(main)))
CarryOn.LOGGER.info("Override Model: " + ModelOverridesHandler.getOverrideObject(ItemCarryonBlock.getBlockState(main), ItemCarryonBlock.getTileData(main)));
if (CustomPickupOverrideHandler.hasSpecialPickupConditions(ItemCarryonBlock.getBlockState(main)))
CarryOn.LOGGER.info("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonBlock.getBlockState(main)));
return 1;
} else if (!main.isEmpty() && main.getItem() == RegistrationHandler.itemEntity)
{
source.sendFeedback(new StringTextComponent("Entity: " + ItemCarryonEntity.getEntity(main, player.world)), true);
source.sendFeedback(new StringTextComponent("Entity Name: " + ItemCarryonEntity.getEntityName(main)), true);
if (CustomPickupOverrideHandler.hasSpecialPickupConditions(ItemCarryonEntity.getEntity(main, player.world)))
source.sendFeedback(new StringTextComponent("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonEntity.getEntity(main, player.world))), true);
CarryOn.LOGGER.info("Entity: " + ItemCarryonEntity.getEntity(main, player.world));
CarryOn.LOGGER.info("Entity Name: " + ItemCarryonEntity.getEntityName(main));
if (CustomPickupOverrideHandler.hasSpecialPickupConditions(ItemCarryonEntity.getEntity(main, player.world)))
CarryOn.LOGGER.info("Custom Pickup Condition: " + CustomPickupOverrideHandler.getPickupCondition(ItemCarryonEntity.getEntity(main, player.world)));
return 1;
}
}
} catch (CommandSyntaxException e)
{
return 0;
}
return 0;
}
private static int handleClear(CommandSource source, Collection<ServerPlayerEntity> players)
{
for (ServerPlayerEntity player : players)
{
try
{
if (source.assertIsEntity() != null)
{
int cleared = 0;
cleared += player.inventory.func_234564_a_(stack -> !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemTile, 64, null); //TODO
cleared += player.inventory.func_234564_a_(stack -> !stack.isEmpty() && stack.getItem() == RegistrationHandler.itemEntity, 64, null);
CarryOn.network.send(PacketDistributor.PLAYER.with(() -> (ServerPlayerEntity) player), new CarrySlotPacket(9, player.getEntityId()));
if (cleared != 1)
source.sendFeedback(new StringTextComponent("Cleared " + cleared + " Items!"), true);
else
source.sendFeedback(new StringTextComponent("Cleared " + cleared + " Item!"), true);
return 1;
} else
throw EntityArgument.ONLY_PLAYERS_ALLOWED.create();
} catch (CommandSyntaxException e)
{
return 0;
}
}
return 0;
}
}