添加基本perk白名单

This commit is contained in:
17146 2024-09-09 00:09:55 +08:00
parent 5e2731f776
commit 442c0c5f66
7 changed files with 87 additions and 33 deletions

View file

@ -229,21 +229,21 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
ItemStack result = gun.copy();
if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) {
if (gunItem.canApplyPerk(result, perkItem.getPerk())) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
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())) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
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())) {
if (gunItem.canApplyPerk(perkItem.getPerk())) {
PerkHelper.setPerk(result, perkItem.getPerk(), this.damagePerkLevel.get());
this.container.setItem(DAMAGE_PERK_SLOT, ItemStack.EMPTY);
}
@ -410,9 +410,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
ItemStack funcPerk = this.container.getItem(FUNC_PERK_SLOT);
ItemStack damagePerk = this.container.getItem(DAMAGE_PERK_SLOT);
boolean flag1 = ammoPerk.isEmpty() || (ammoPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(pStack, perkItem.getPerk()));
boolean flag2 = funcPerk.isEmpty() || (funcPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(pStack, perkItem.getPerk()));
boolean flag3 = damagePerk.isEmpty() || (damagePerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(pStack, perkItem.getPerk()));
boolean flag1 = ammoPerk.isEmpty() || (ammoPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(perkItem.getPerk()));
boolean flag2 = funcPerk.isEmpty() || (funcPerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(perkItem.getPerk()));
boolean flag3 = damagePerk.isEmpty() || (damagePerk.getItem() instanceof PerkItem perkItem && gunItem.canApplyPerk(perkItem.getPerk()));
return flag1 && flag2 && flag3 && this.container.getItem(RESULT_SLOT).isEmpty();
}
@ -445,7 +445,9 @@ public class ReforgingTableMenu extends AbstractContainerMenu {
}
public boolean mayPlace(ItemStack pStack) {
return pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == type && !container.getItem(INPUT_SLOT).isEmpty();
return pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == type
&& !container.getItem(INPUT_SLOT).isEmpty() && container.getItem(INPUT_SLOT).getItem() instanceof GunItem gunItem
&& gunItem.canApplyPerk(perkItem.getPerk());
}
public int getMaxStackSize() {

View file

@ -8,6 +8,8 @@ import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.AnimatedItem;
import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.PoseTool;
import net.mcreator.superbwarfare.tools.RarityTool;
@ -78,7 +80,7 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem {
transformType = type;
}
private PlayState idlePredicate(AnimationState event) {
private PlayState idlePredicate(AnimationState<Aa12Item> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
@ -123,7 +125,7 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem {
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState event) {
private PlayState procedurePredicate(AnimationState<Aa12Item> event) {
if (transformType != null && transformType.firstPerson()) {
if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
@ -193,4 +195,9 @@ public class Aa12Item extends GunItem implements GeoItem, AnimatedItem {
public String getGunDisplayName() {
return " AA-12";
}
@Override
public boolean canApplyPerk(Perk perk) {
return PerkHelper.SHOTGUN_PERKS.test(perk);
}
}

View file

@ -8,6 +8,8 @@ import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.AnimatedItem;
import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool;
@ -79,7 +81,7 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem {
transformType = type;
}
private PlayState idlePredicate(AnimationState event) {
private PlayState idlePredicate(AnimationState<Abekiri> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
@ -116,7 +118,7 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem {
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState event) {
private PlayState procedurePredicate(AnimationState<Abekiri> event) {
if (transformType != null) {
if (!(this.animationProcedure.equals("empty")) && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
@ -179,4 +181,9 @@ public class Abekiri extends GunItem implements GeoItem, AnimatedItem {
public String getGunDisplayName() {
return " Abekiri";
}
@Override
public boolean canApplyPerk(Perk perk) {
return PerkHelper.SHOTGUN_PERKS.test(perk);
}
}

View file

@ -182,7 +182,7 @@ public abstract class GunItem extends Item {
}
}
public boolean canApplyPerk(ItemStack stack, Perk perk) {
public boolean canApplyPerk(Perk perk) {
return true;
}
}

View file

@ -8,14 +8,14 @@ import net.mcreator.superbwarfare.init.ModItems;
import net.mcreator.superbwarfare.init.ModSounds;
import net.mcreator.superbwarfare.init.ModTags;
import net.mcreator.superbwarfare.item.AnimatedItem;
import net.mcreator.superbwarfare.perk.Perk;
import net.mcreator.superbwarfare.perk.PerkHelper;
import net.mcreator.superbwarfare.tools.GunsTool;
import net.mcreator.superbwarfare.tools.PoseTool;
import net.mcreator.superbwarfare.tools.TooltipTool;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.BlockEntityWithoutLevelRenderer;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.InteractionHand;
@ -25,8 +25,10 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.attributes.Attribute;
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.item.*;
import net.minecraft.world.level.Level;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity;
import net.minecraftforge.client.extensions.common.IClientItemExtensions;
import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
@ -37,7 +39,6 @@ import software.bernie.geckolib.core.animation.RawAnimation;
import software.bernie.geckolib.core.object.PlayState;
import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import java.util.function.Consumer;
@ -73,7 +74,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
transformType = type;
}
private PlayState idlePredicate(AnimationState event) {
private PlayState idlePredicate(AnimationState<M4Item> event) {
LocalPlayer player = Minecraft.getInstance().player;
if (player == null) return PlayState.STOP;
ItemStack stack = player.getMainHandItem();
@ -118,7 +119,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
return PlayState.STOP;
}
private PlayState procedurePredicate(AnimationState event) {
private PlayState procedurePredicate(AnimationState<M4Item> event) {
if (transformType != null && transformType.firstPerson()) {
if (!this.animationProcedure.equals("empty") && event.getController().getAnimationState() == AnimationController.State.STOPPED) {
event.getController().setAnimation(RawAnimation.begin().thenPlay(this.animationProcedure));
@ -158,11 +159,6 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
return map;
}
@Override
public void appendHoverText(ItemStack stack, Level world, List<Component> list, TooltipFlag flag) {
TooltipTool.addGunTips(list, stack);
}
@Override
public Set<SoundEvent> getReloadSound() {
return Set.of(ModSounds.M_4_RELOAD_EMPTY.get(), ModSounds.M_4_RELOAD_NORMAL.get());
@ -188,4 +184,9 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
public String getGunDisplayName() {
return " M4A1";
}
@Override
public boolean canApplyPerk(Perk perk) {
return PerkHelper.RIFLE_PERKS.test(perk);
}
}

View file

@ -25,7 +25,6 @@ import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.network.NetworkEvent;
import net.minecraftforge.network.PacketDistributor;
import java.util.ArrayList;
import java.util.function.Supplier;
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
@ -42,8 +41,8 @@ public class ModVariables {
public static void onPlayerLoggedInSyncPlayerVariables(PlayerEvent.PlayerLoggedInEvent event) {
if (event.getEntity().level().isClientSide()) return;
for (Entity entity : new ArrayList<>(event.getEntity().level().players())) {
entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity);
for (Player player : event.getEntity().level().players()) {
player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player);
}
}
@ -51,8 +50,8 @@ public class ModVariables {
public static void onPlayerRespawnedSyncPlayerVariables(PlayerEvent.PlayerRespawnEvent event) {
if (event.getEntity().level().isClientSide()) return;
for (Entity entity : new ArrayList<>(event.getEntity().level().players())) {
entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity);
for (Player player : event.getEntity().level().players()) {
player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player);
}
}
@ -60,8 +59,8 @@ public class ModVariables {
public static void onPlayerChangedDimensionSyncPlayerVariables(PlayerEvent.PlayerChangedDimensionEvent event) {
if (event.getEntity().level().isClientSide()) return;
for (Entity entity : new ArrayList<>(event.getEntity().level().players())) {
entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity);
for (Player player : event.getEntity().level().players()) {
player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player);
}
}
@ -92,8 +91,8 @@ public class ModVariables {
if (event.getEntity().level().isClientSide()) return;
for (Entity entity : new ArrayList<>(event.getEntity().level().players())) {
entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(entity);
for (Player player : event.getEntity().level().players()) {
player.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()).syncPlayerVariables(player);
}
}

View file

@ -12,6 +12,7 @@ import net.minecraftforge.registries.RegistryObject;
import javax.annotation.Nullable;
import java.util.Optional;
import java.util.function.Predicate;
public class PerkHelper {
private static final String TAG_PERK_ID = "id";
@ -178,4 +179,41 @@ public class PerkHelper {
return resourceLocation.getNamespace() + ":" + resourceLocation.getPath();
}
public static final Predicate<Perk> SHOTGUN_PERKS = perk -> {
switch (perk.type) {
case AMMO -> {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.SUBSISTENCE.get();
}
case DAMAGE -> {
return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get();
}
default -> {
return false;
}
}
};
public static final Predicate<Perk> RIFLE_PERKS = perk -> {
switch (perk.type) {
case AMMO -> {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() ||
perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||
perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.HEAD_SEEKER.get();
}
default -> {
return false;
}
}
};
}