Skip to content

Commit

Permalink
add command to summon trader with offer id
Browse files Browse the repository at this point in the history
  • Loading branch information
MelanX committed Jul 29, 2023
1 parent e0837d2 commit b60ee1d
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 16 deletions.
4 changes: 2 additions & 2 deletions src/main/java/de/melanx/datatrader/DataTrader.java
@@ -1,6 +1,6 @@
package de.melanx.datatrader;

import de.melanx.datatrader.commands.SetOfferCommand;
import de.melanx.datatrader.commands.DataTraderCommands;
import de.melanx.datatrader.data.ItemModels;
import de.melanx.datatrader.trader.Trader;
import net.minecraft.client.renderer.entity.EntityRenderers;
Expand All @@ -27,7 +27,7 @@ public DataTrader() {
instance = this;
this.offers = new DataMerchantOffers();
MinecraftForge.EVENT_BUS.register(new EventHandler());
MinecraftForge.EVENT_BUS.addListener(SetOfferCommand::onRegisterCommands);
MinecraftForge.EVENT_BUS.addListener(DataTraderCommands::onRegisterCommands);

FMLJavaModLoadingContext.get().getModEventBus().addListener(EventHandler::addToTab);
FMLJavaModLoadingContext.get().getModEventBus().addListener(Trader::registerAttributes);
Expand Down
@@ -0,0 +1,23 @@
package de.melanx.datatrader.commands;

import com.mojang.brigadier.suggestion.SuggestionProvider;
import de.melanx.datatrader.DataTrader;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.event.RegisterCommandsEvent;

public class DataTraderCommands {

public static final SuggestionProvider<CommandSourceStack> OFFER_IDS = (context, builder) -> {
return SharedSuggestionProvider.suggest(DataTrader.getInstance().getOffers().getIds().stream().map(ResourceLocation::toString), builder);
};

public static void onRegisterCommands(RegisterCommandsEvent event) {
event.getDispatcher().register(Commands.literal(DataTrader.getInstance().modid)
.then(SummonCommand.register())
.then(SetOfferCommand.register())
);
}
}
15 changes: 1 addition & 14 deletions src/main/java/de/melanx/datatrader/commands/SetOfferCommand.java
Expand Up @@ -3,35 +3,22 @@
import com.mojang.brigadier.builder.ArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.mojang.brigadier.suggestion.SuggestionProvider;
import de.melanx.datatrader.DataTrader;
import de.melanx.datatrader.trader.Trader;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.SharedSuggestionProvider;
import net.minecraft.commands.arguments.EntityArgument;
import net.minecraft.commands.arguments.ResourceLocationArgument;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.Entity;
import net.minecraftforge.event.RegisterCommandsEvent;

public class SetOfferCommand {

public static final SuggestionProvider<CommandSourceStack> OFFER_IDS = (context, builder) -> {
return SharedSuggestionProvider.suggest(DataTrader.getInstance().getOffers().getIds().stream().map(ResourceLocation::toString), builder);
};

public static void onRegisterCommands(RegisterCommandsEvent event) {
event.getDispatcher().register(Commands.literal(DataTrader.getInstance().modid)
.then(SetOfferCommand.register())
);
}

public static ArgumentBuilder<CommandSourceStack, ?> register() {
return Commands.literal("setOffer").requires(source -> source.hasPermission(2))
.then(Commands.argument("entity", EntityArgument.entity())
.then(Commands.argument("offerId", ResourceLocationArgument.id()).suggests(OFFER_IDS)
.then(Commands.argument("offerId", ResourceLocationArgument.id()).suggests(DataTraderCommands.OFFER_IDS)
.executes(SetOfferCommand::setOffer)));
}

Expand Down
52 changes: 52 additions & 0 deletions src/main/java/de/melanx/datatrader/commands/SummonCommand.java
@@ -0,0 +1,52 @@
package de.melanx.datatrader.commands;

import com.mojang.brigadier.arguments.BoolArgumentType;
import com.mojang.brigadier.builder.ArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
import de.melanx.datatrader.DataTrader;
import de.melanx.datatrader.ModEntities;
import de.melanx.datatrader.trader.Trader;
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.commands.Commands;
import net.minecraft.commands.arguments.ResourceLocationArgument;
import net.minecraft.commands.arguments.coordinates.Vec3Argument;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.MobSpawnType;
import net.minecraft.world.phys.Vec3;

public class SummonCommand {

public static ArgumentBuilder<CommandSourceStack, ?> register() {
return Commands.literal("summon").requires(source -> source.hasPermission(2))
.then(Commands.argument("pos", Vec3Argument.vec3())
.then(Commands.argument("offerId", ResourceLocationArgument.id()).suggests(DataTraderCommands.OFFER_IDS)
.executes(context -> SummonCommand.summon(context, false))
.then(Commands.argument("NoAI", BoolArgumentType.bool())
.executes(context -> SummonCommand.summon(context, BoolArgumentType.getBool(context, "NoAI"))))));
}

private static int summon(CommandContext<CommandSourceStack> context, boolean noai) {
Vec3 pos = Vec3Argument.getVec3(context, "pos");
ResourceLocation offerId = ResourceLocationArgument.getId(context, "offerId");

if (!DataTrader.getInstance().getOffers().getIds().contains(offerId)) {
context.getSource().sendFailure(Component.translatable("command.datatrader.setoffer.wrong_id"));
return 0;
}

ServerLevel level = context.getSource().getLevel();
Trader trader = ModEntities.dataTrader.create(level);
//noinspection DataFlowIssue
trader.finalizeSpawn(level, level.getCurrentDifficultyAt(BlockPos.containing(pos.x, pos.y, pos.z)), MobSpawnType.BREEDING, null, null);
trader.moveTo(pos.x, pos.y, pos.z, 330, 0);
trader.setNoAi(noai);
level.addFreshEntity(trader);
trader.setOfferId(offerId);

context.getSource().sendSuccess(() -> Component.translatable("command.datatrader.setoffer.success", offerId), true);
return 1;
}
}

0 comments on commit b60ee1d

Please sign in to comment.