实现基础的perk添加功能
This commit is contained in:
parent
7326891386
commit
4b231c9ae4
4 changed files with 96 additions and 4 deletions
|
@ -108,6 +108,7 @@ public class ModUtils {
|
|||
addNetworkMessage(DroneMovementMessage.class, DroneMovementMessage::encode, DroneMovementMessage::decode, DroneMovementMessage::handler);
|
||||
addNetworkMessage(DroneFireMessage.class, DroneFireMessage::buffer, DroneFireMessage::new, DroneFireMessage::handler);
|
||||
addNetworkMessage(SimulationDistanceMessage.class, SimulationDistanceMessage::encode, SimulationDistanceMessage::decode, SimulationDistanceMessage::handle, Optional.of(NetworkDirection.PLAY_TO_CLIENT));
|
||||
addNetworkMessage(GunReforgeMessage.class, GunReforgeMessage::encode, GunReforgeMessage::decode, GunReforgeMessage::handler);
|
||||
|
||||
event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)),
|
||||
Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get())));
|
||||
|
|
|
@ -4,7 +4,9 @@ import net.mcreator.superbwarfare.init.ModBlocks;
|
|||
import net.mcreator.superbwarfare.init.ModMenuTypes;
|
||||
import net.mcreator.superbwarfare.init.ModTags;
|
||||
import net.mcreator.superbwarfare.item.PerkItem;
|
||||
import net.mcreator.superbwarfare.item.gun.GunItem;
|
||||
import net.mcreator.superbwarfare.perk.Perk;
|
||||
import net.mcreator.superbwarfare.perk.PerkHelper;
|
||||
import net.minecraft.world.Container;
|
||||
import net.minecraft.world.SimpleContainer;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
|
@ -45,6 +47,10 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
this.container = container;
|
||||
this.access = pContainerLevelAccess;
|
||||
|
||||
this.ammoPerkLevel.set(1);
|
||||
this.funcPerkLevel.set(1);
|
||||
this.damagePerkLevel.set(1);
|
||||
|
||||
this.addDataSlot(ammoPerkLevel);
|
||||
this.addDataSlot(funcPerkLevel);
|
||||
this.addDataSlot(damagePerkLevel);
|
||||
|
@ -142,6 +148,47 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
|
|||
});
|
||||
}
|
||||
|
||||
public void generateResult() {
|
||||
ItemStack gun = this.container.getItem(INPUT_SLOT);
|
||||
if (!(gun.getItem() instanceof GunItem gunItem)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack ammo = this.container.getItem(AMMO_PERK_SLOT);
|
||||
ItemStack func = this.container.getItem(FUNC_PERK_SLOT);
|
||||
ItemStack damage = this.container.getItem(DAMAGE_PERK_SLOT);
|
||||
if (ammo.isEmpty() && func.isEmpty() && damage.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack result = gun.copy();
|
||||
|
||||
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) {
|
||||
if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.AMMO)) {
|
||||
PerkHelper.setPerk(result, perkItem.getPerk(), this.ammoPerkLevel.get());
|
||||
this.container.setItem(AMMO_PERK_SLOT, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
if (!func.isEmpty() && func.getItem() instanceof PerkItem perkItem) {
|
||||
if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.FUNCTIONAL)) {
|
||||
PerkHelper.setPerk(result, perkItem.getPerk(), this.funcPerkLevel.get());
|
||||
this.container.setItem(FUNC_PERK_SLOT, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
if (!damage.isEmpty() && damage.getItem() instanceof PerkItem perkItem) {
|
||||
if (gunItem.canApplyPerk(result, perkItem.getPerk(), Perk.Type.DAMAGE)) {
|
||||
PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get());
|
||||
this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
this.container.setItem(INPUT_SLOT, ItemStack.EMPTY);
|
||||
this.container.setItem(RESULT_SLOT, result);
|
||||
this.container.setChanged();
|
||||
}
|
||||
|
||||
static class InputSlot extends Slot {
|
||||
public InputSlot(Container pContainer, int pSlot, int pX, int pY) {
|
||||
super(pContainer, pSlot, pX, pY);
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.mcreator.superbwarfare.client.screens;
|
|||
|
||||
import net.mcreator.superbwarfare.ModUtils;
|
||||
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
|
||||
import net.mcreator.superbwarfare.network.message.GunReforgeMessage;
|
||||
import net.mcreator.superbwarfare.perk.Perk;
|
||||
import net.minecraft.client.gui.GuiGraphics;
|
||||
import net.minecraft.client.gui.components.AbstractButton;
|
||||
|
@ -66,7 +67,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
|||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
static class ReforgeButton extends AbstractButton {
|
||||
class ReforgeButton extends AbstractButton {
|
||||
|
||||
public ReforgeButton(int pX, int pY) {
|
||||
super(pX, pY, 40, 16, Component.translatable("button.superbwarfare.reforge"));
|
||||
|
@ -84,7 +85,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
|||
|
||||
@Override
|
||||
public void onPress() {
|
||||
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new GunReforgeMessage(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -94,7 +95,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
|||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
static class UpgradeButton extends AbstractButton {
|
||||
class UpgradeButton extends AbstractButton {
|
||||
public Perk.Type type;
|
||||
|
||||
public UpgradeButton(int pX, int pY, Perk.Type type) {
|
||||
|
@ -118,7 +119,7 @@ public class ReforgingTableScreen extends AbstractContainerScreen<ReforgingTable
|
|||
}
|
||||
|
||||
@OnlyIn(Dist.CLIENT)
|
||||
static class DowngradeButton extends AbstractButton {
|
||||
class DowngradeButton extends AbstractButton {
|
||||
public Perk.Type type;
|
||||
|
||||
public DowngradeButton(int pX, int pY, Perk.Type type) {
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package net.mcreator.superbwarfare.network.message;
|
||||
|
||||
import net.mcreator.superbwarfare.block.menu.ReforgingTableMenu;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.inventory.AbstractContainerMenu;
|
||||
import net.minecraftforge.network.NetworkEvent;
|
||||
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class GunReforgeMessage {
|
||||
int type;
|
||||
|
||||
public GunReforgeMessage(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public static void encode(GunReforgeMessage message, FriendlyByteBuf buffer) {
|
||||
buffer.writeInt(message.type);
|
||||
}
|
||||
|
||||
public static GunReforgeMessage decode(FriendlyByteBuf buffer) {
|
||||
return new GunReforgeMessage(buffer.readInt());
|
||||
}
|
||||
|
||||
public static void handler(GunReforgeMessage message, Supplier<NetworkEvent.Context> ctx) {
|
||||
ctx.get().enqueueWork(() -> {
|
||||
ServerPlayer player = ctx.get().getSender();
|
||||
if (player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
AbstractContainerMenu abstractcontainermenu = player.containerMenu;
|
||||
if (abstractcontainermenu instanceof ReforgingTableMenu menu) {
|
||||
if (!menu.stillValid(player)) {
|
||||
return;
|
||||
}
|
||||
menu.generateResult();
|
||||
}
|
||||
});
|
||||
ctx.get().setPacketHandled(true);
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue