添加联动perk

This commit is contained in:
17146 2024-08-09 22:51:25 +08:00
parent f8d04e2ec7
commit 1e98444321
9 changed files with 110 additions and 26 deletions

View file

@ -14,7 +14,7 @@ def getGitCommitHash() {
return stdout.toString().trim() return stdout.toString().trim()
} }
version = '0.1.5-SNAPSHOT-' + getGitCommitHash() version = '0.1.6-SNAPSHOT-' + getGitCommitHash()
group = 'com.Atsushio.superbwarfare' group = 'com.Atsushio.superbwarfare'
archivesBaseName = 'superbwarfare' archivesBaseName = 'superbwarfare'

View file

@ -40,6 +40,7 @@ public class ModUtils {
public ModUtils() { public ModUtils() {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
ModPerks.register(bus);
ModSounds.REGISTRY.register(bus); ModSounds.REGISTRY.register(bus);
ModBlocks.REGISTRY.register(bus); ModBlocks.REGISTRY.register(bus);
ModItems.register(bus); ModItems.register(bus);
@ -50,7 +51,6 @@ public class ModUtils {
ModPotion.POTIONS.register(bus); ModPotion.POTIONS.register(bus);
ModMenus.REGISTRY.register(bus); ModMenus.REGISTRY.register(bus);
ModEnchantments.REGISTRY.register(bus); ModEnchantments.REGISTRY.register(bus);
ModPerks.PERKS.register(bus);
bus.addListener(this::onCommonSetup); bus.addListener(this::onCommonSetup);

View file

@ -41,7 +41,7 @@ public class KillMessageOverlay {
private static final ResourceLocation SHOCK = new ResourceLocation(ModUtils.MODID, "textures/screens/damage_types/shock.png"); private static final ResourceLocation SHOCK = new ResourceLocation(ModUtils.MODID, "textures/screens/damage_types/shock.png");
private static final ResourceLocation BLOOD_CRYSTAL = new ResourceLocation(ModUtils.MODID, "textures/screens/damage_types/blood_crystal.png"); private static final ResourceLocation BLOOD_CRYSTAL = new ResourceLocation(ModUtils.MODID, "textures/screens/damage_types/blood_crystal.png");
private static final ResourceLocation WORLD_PEACE_STAFF = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/compat/world_peace_staff.png"); private static final ResourceLocation WORLD_PEACE_STAFF = new ResourceLocation(ModUtils.MODID, "textures/gun_icon/registerCompatPerks/world_peace_staff.png");
@SubscribeEvent(priority = EventPriority.NORMAL) @SubscribeEvent(priority = EventPriority.NORMAL)
public static void eventHandler(RenderGuiEvent.Pre event) { public static void eventHandler(RenderGuiEvent.Pre event) {

View file

@ -0,0 +1,17 @@
package net.mcreator.superbwarfare.compat;
import net.minecraft.world.effect.MobEffect;
import net.minecraftforge.registries.ObjectHolder;
public class CompatHolder {
public static final String DMV = "dreamaticvoyage";
public static final String VRC = "virtuarealcraft";
@ObjectHolder(registryName = "minecraft:mob_effect", value = DMV + ":bleeding")
public static final MobEffect DMV_BLEEDING = null;
@ObjectHolder(registryName = "minecraft:mob_effect", value = VRC + ":curse_flame")
public static final MobEffect VRC_CURSE_FLAME = null;
}

View file

@ -184,7 +184,6 @@ public class ModItems {
public static final RegistryObject<Item> BARBED_WIRE = block(ModBlocks.BARBED_WIRE); public static final RegistryObject<Item> BARBED_WIRE = block(ModBlocks.BARBED_WIRE);
public static final RegistryObject<Item> DRAGON_TEETH = block(ModBlocks.DRAGON_TEETH); public static final RegistryObject<Item> DRAGON_TEETH = block(ModBlocks.DRAGON_TEETH);
private static RegistryObject<Item> block(RegistryObject<Block> block) { private static RegistryObject<Item> block(RegistryObject<Block> block) {
return BLOCKS.register(block.getId().getPath(), () -> new BlockItem(block.get(), new Item.Properties())); return BLOCKS.register(block.getId().getPath(), () -> new BlockItem(block.get(), new Item.Properties()));
} }
@ -195,8 +194,10 @@ public class ModItems {
public static final DeferredRegister<Item> PERKS = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID); public static final DeferredRegister<Item> PERKS = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID);
public static void registerPerkItems() { public static void registerPerkItems() {
ModPerks.PERKS.getEntries().stream().filter(p -> p != ModPerks.AP_BULLET) ModPerks.AMMO_PERKS.getEntries().stream().filter(p -> p != ModPerks.AP_BULLET)
.forEach(registryObject -> PERKS.register(registryObject.getId().getPath(), () -> new PerkItem(registryObject))); .forEach(registryObject -> PERKS.register(registryObject.getId().getPath(), () -> new PerkItem(registryObject)));
ModPerks.FUNC_PERKS.getEntries().forEach(registryObject -> PERKS.register(registryObject.getId().getPath(), () -> new PerkItem(registryObject)));
ModPerks.DAMAGE_PERKS.getEntries().forEach(registryObject -> PERKS.register(registryObject.getId().getPath(), () -> new PerkItem(registryObject)));
} }
/** /**

View file

@ -1,11 +1,14 @@
package net.mcreator.superbwarfare.init; package net.mcreator.superbwarfare.init;
import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.ModUtils;
import net.mcreator.superbwarfare.compat.CompatHolder;
import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.AmmoPerk;
import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.Perk;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffects; import net.minecraft.world.effect.MobEffects;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModList;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.NewRegistryEvent; import net.minecraftforge.registries.NewRegistryEvent;
@ -20,23 +23,54 @@ public class ModPerks {
event.create(new RegistryBuilder<Perk>().setName(new ResourceLocation(ModUtils.MODID, "perk"))); event.create(new RegistryBuilder<Perk>().setName(new ResourceLocation(ModUtils.MODID, "perk")));
} }
public static final DeferredRegister<Perk> PERKS = DeferredRegister.create(new ResourceLocation(ModUtils.MODID, "perk"), ModUtils.MODID); /**
* Ammo Perks
*/
public static final DeferredRegister<Perk> AMMO_PERKS = DeferredRegister.create(new ResourceLocation(ModUtils.MODID, "perk"), ModUtils.MODID);
public static final RegistryObject<Perk> AP_BULLET = PERKS.register("ap_bullet", public static final RegistryObject<Perk> AP_BULLET = AMMO_PERKS.register("ap_bullet",
() -> new AmmoPerk(new AmmoPerk.Builder("ap_bullet", Perk.Type.AMMO).bypassArmorRate(0.4f).rgb(230, 0, 0))); () -> new AmmoPerk(new AmmoPerk.Builder("ap_bullet", Perk.Type.AMMO).bypassArmorRate(0.4f).rgb(230, 0, 0)));
public static final RegistryObject<Perk> SILVER_BULLET = PERKS.register("silver_bullet", public static final RegistryObject<Perk> SILVER_BULLET = AMMO_PERKS.register("silver_bullet",
() -> new AmmoPerk(new AmmoPerk.Builder("silver_bullet", Perk.Type.AMMO).bypassArmorRate(0.05f).rgb(87, 166, 219))); () -> new AmmoPerk(new AmmoPerk.Builder("silver_bullet", Perk.Type.AMMO).bypassArmorRate(0.05f).rgb(87, 166, 219)));
public static final RegistryObject<Perk> POISONOUS_BULLET = PERKS.register("poisonous_bullet", public static final RegistryObject<Perk> POISONOUS_BULLET = AMMO_PERKS.register("poisonous_bullet",
() -> new AmmoPerk(new AmmoPerk.Builder("poisonous_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(48, 131, 6) () -> new AmmoPerk(new AmmoPerk.Builder("poisonous_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(48, 131, 6)
.mobEffect(() -> MobEffects.POISON))); .mobEffect(() -> MobEffects.POISON)));
public static final RegistryObject<Perk> BEAST_BULLET = PERKS.register("beast_bullet", public static final RegistryObject<Perk> BEAST_BULLET = AMMO_PERKS.register("beast_bullet",
() -> new AmmoPerk(new AmmoPerk.Builder("beast_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(134, 65, 14))); () -> new AmmoPerk(new AmmoPerk.Builder("beast_bullet", Perk.Type.AMMO).bypassArmorRate(0.0f).rgb(134, 65, 14)));
public static final RegistryObject<Perk> HEAL_CLIP = PERKS.register("heal_clip", () -> new Perk("heal_clip", Perk.Type.FUNCTIONAL)); /**
public static final RegistryObject<Perk> FOURTH_TIMES_CHARM = PERKS.register("fourth_times_charm", () -> new Perk("fourth_times_charm", Perk.Type.FUNCTIONAL)); * Functional Perks
*/
public static final DeferredRegister<Perk> FUNC_PERKS = DeferredRegister.create(new ResourceLocation(ModUtils.MODID, "perk"), ModUtils.MODID);
public static final RegistryObject<Perk> KILL_CLIP = PERKS.register("kill_clip", () -> new Perk("kill_clip", Perk.Type.DAMAGE)); public static final RegistryObject<Perk> HEAL_CLIP = FUNC_PERKS.register("heal_clip", () -> new Perk("heal_clip", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> GUTSHOT_STRAIGHT = PERKS.register("gutshot_straight", () -> new Perk("gutshot_straight", Perk.Type.DAMAGE)); public static final RegistryObject<Perk> FOURTH_TIMES_CHARM = FUNC_PERKS.register("fourth_times_charm", () -> new Perk("fourth_times_charm", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> KILLING_TALLY = PERKS.register("killing_tally", () -> new Perk("killing_tally", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> MONSTER_HUNTER = PERKS.register("monster_hunter", () -> new Perk("monster_hunter", Perk.Type.DAMAGE)); /**
* Damage Perks
*/
public static final DeferredRegister<Perk> DAMAGE_PERKS = DeferredRegister.create(new ResourceLocation(ModUtils.MODID, "perk"), ModUtils.MODID);
public static final RegistryObject<Perk> KILL_CLIP = DAMAGE_PERKS.register("kill_clip", () -> new Perk("kill_clip", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> GUTSHOT_STRAIGHT = DAMAGE_PERKS.register("gutshot_straight", () -> new Perk("gutshot_straight", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> KILLING_TALLY = DAMAGE_PERKS.register("killing_tally", () -> new Perk("killing_tally", Perk.Type.DAMAGE));
public static final RegistryObject<Perk> MONSTER_HUNTER = DAMAGE_PERKS.register("monster_hunter", () -> new Perk("monster_hunter", Perk.Type.DAMAGE));
public static void registerCompatPerks() {
if (ModList.get().isLoaded(CompatHolder.DMV)) {
AMMO_PERKS.register("blade_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("blade_bullet", Perk.Type.AMMO)
.bypassArmorRate(-0.2f).rgb(0xB4, 0x4B, 0x88).mobEffect(() -> CompatHolder.DMV_BLEEDING)));
}
if (ModList.get().isLoaded(CompatHolder.VRC)) {
AMMO_PERKS.register("curse_flame_bullet", () -> new AmmoPerk(new AmmoPerk.Builder("curse_flame_bullet", Perk.Type.AMMO)
.bypassArmorRate(0.0f).rgb(0xB1, 0xC1, 0xF2).mobEffect(() -> CompatHolder.VRC_CURSE_FLAME)));
}
}
public static void register(IEventBus bus) {
registerCompatPerks();
AMMO_PERKS.register(bus);
FUNC_PERKS.register(bus);
DAMAGE_PERKS.register(bus);
}
} }

View file

@ -40,11 +40,23 @@ public class PerkHelper {
@Nullable @Nullable
public static ResourceLocation getPerkId(Perk perk) { public static ResourceLocation getPerkId(Perk perk) {
return ModPerks.PERKS.getEntries().stream() return switch (perk.type) {
.filter(p -> p.get().descriptionId.equals(perk.descriptionId)) case AMMO -> ModPerks.AMMO_PERKS.getEntries().stream()
.findFirst() .filter(p -> p.get().descriptionId.equals(perk.descriptionId))
.map(RegistryObject::getId) .findFirst()
.orElse(null); .map(RegistryObject::getId)
.orElse(null);
case FUNCTIONAL -> ModPerks.FUNC_PERKS.getEntries().stream()
.filter(p -> p.get().descriptionId.equals(perk.descriptionId))
.findFirst()
.map(RegistryObject::getId)
.orElse(null);
case DAMAGE -> ModPerks.DAMAGE_PERKS.getEntries().stream()
.filter(p -> p.get().descriptionId.equals(perk.descriptionId))
.findFirst()
.map(RegistryObject::getId)
.orElse(null);
};
} }
public static int getItemPerkLevel(Perk perk, ItemStack stack) { public static int getItemPerkLevel(Perk perk, ItemStack stack) {
@ -115,11 +127,23 @@ public class PerkHelper {
return null; return null;
} }
return ModPerks.PERKS.getEntries().stream() return switch (type) {
.filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID))) case AMMO -> ModPerks.AMMO_PERKS.getEntries().stream()
.findFirst() .filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID)))
.map(RegistryObject::get) .findFirst()
.orElse(null); .map(RegistryObject::get)
.orElse(null);
case FUNCTIONAL -> ModPerks.FUNC_PERKS.getEntries().stream()
.filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID)))
.findFirst()
.map(RegistryObject::get)
.orElse(null);
case DAMAGE -> ModPerks.DAMAGE_PERKS.getEntries().stream()
.filter(p -> makeId(p.getId()).equals(tagPerk.getCompound(type.getName()).getString(TAG_PERK_ID)))
.findFirst()
.map(RegistryObject::get)
.orElse(null);
};
} }
public static String makeId(ResourceLocation resourceLocation) { public static String makeId(ResourceLocation resourceLocation) {

View file

@ -182,6 +182,10 @@
"des.superbwarfare.beast_bullet": "Ignore obstacles, Increase criteria area, Kill every living entity", "des.superbwarfare.beast_bullet": "Ignore obstacles, Increase criteria area, Kill every living entity",
"item.superbwarfare.poisonous_bullet": "Poisonous Bullet", "item.superbwarfare.poisonous_bullet": "Poisonous Bullet",
"des.superbwarfare.poisonous_bullet": "Makes the target poison after landing a hit", "des.superbwarfare.poisonous_bullet": "Makes the target poison after landing a hit",
"item.superbwarfare.blade_bullet": "Blade Bullet",
"des.superbwarfare.blade_bullet": "Makes the target bleeding after landing a hit",
"item.superbwarfare.curse_flame_bullet": "Curse Flame Bullet",
"des.superbwarfare.curse_flame_bullet": "命中后会使目标受到咒火效果",
"item.superbwarfare.heal_clip": "Heal Clip", "item.superbwarfare.heal_clip": "Heal Clip",
"des.superbwarfare.heal_clip": "Reloading after dealing a final blow will heal you and your nearby allies", "des.superbwarfare.heal_clip": "Reloading after dealing a final blow will heal you and your nearby allies",

View file

@ -182,6 +182,10 @@
"des.superbwarfare.beast_bullet": "无视障碍物,增大判定范围,秒杀一切生物", "des.superbwarfare.beast_bullet": "无视障碍物,增大判定范围,秒杀一切生物",
"item.superbwarfare.poisonous_bullet": "淬毒弹", "item.superbwarfare.poisonous_bullet": "淬毒弹",
"des.superbwarfare.poisonous_bullet": "命中后会使目标中毒", "des.superbwarfare.poisonous_bullet": "命中后会使目标中毒",
"item.superbwarfare.blade_bullet": "刀片弹",
"des.superbwarfare.blade_bullet": "命中后会使目标流血",
"item.superbwarfare.curse_flame_bullet": "咒火弹",
"des.superbwarfare.curse_flame_bullet": "命中后会使目标受到咒火效果",
"item.superbwarfare.heal_clip": "治疗弹匣", "item.superbwarfare.heal_clip": "治疗弹匣",
"des.superbwarfare.heal_clip": "最后一击后短时间内填装,可治疗自身和附近队友", "des.superbwarfare.heal_clip": "最后一击后短时间内填装,可治疗自身和附近队友",