~williewillus/botania

22c5fc96eed0bd611309d98ec6e92f29e0dba051 — Vincent Lee 1 year, 2 months ago 049ebef
Remove desu gun

Prompted by randomguypi and ok-ed by vaz
25 files changed, 33 insertions(+), 163 deletions(-)

M Fabric/src/main/java/vazkii/botania/fabric/client/FabricManaBlasterModel.java
M Forge/src/main/java/vazkii/botania/forge/client/ForgeManaBlasterModel.java
M Xplat/src/generated/resources/.cache/ca0b139d7ffbdcad7e28a9e04c29c4ff458197e3
D Xplat/src/generated/resources/data/botania/advancements/challenge/desu_gun.json
M Xplat/src/main/java/vazkii/botania/client/model/ManaBlasterBakedModel.java
M Xplat/src/main/java/vazkii/botania/common/advancements/ManaBlasterTrigger.java
M Xplat/src/main/java/vazkii/botania/common/item/ManaBlasterItem.java
M Xplat/src/main/java/vazkii/botania/data/AdvancementProvider.java
M Xplat/src/main/resources/assets/botania/lang/en_us.json
M Xplat/src/main/resources/assets/botania/lang/es_es.json
M Xplat/src/main/resources/assets/botania/lang/fr_fr.json
M Xplat/src/main/resources/assets/botania/lang/ja_jp.json
M Xplat/src/main/resources/assets/botania/lang/ko_kr.json
M Xplat/src/main/resources/assets/botania/lang/nl_nl.json
M Xplat/src/main/resources/assets/botania/lang/ru_ru.json
M Xplat/src/main/resources/assets/botania/lang/zh_cn.json
M Xplat/src/main/resources/assets/botania/lang/zh_tw.json
D Xplat/src/main/resources/assets/botania/models/item/desu_gun_clip.json
D Xplat/src/main/resources/assets/botania/models/item/desu_gun_noclip.json
M Xplat/src/main/resources/assets/botania/models/item/mana_gun.json
D Xplat/src/main/resources/assets/botania/textures/item/desu_gun.png
D Xplat/src/main/resources/assets/botania/textures/item/desu_gun_clip.png
D Xplat/src/main/resources/assets/botania/textures/item/desu_gun_overlay.png
M doc/omake.md
M web/changelog.md
M Fabric/src/main/java/vazkii/botania/fabric/client/FabricManaBlasterModel.java => Fabric/src/main/java/vazkii/botania/fabric/client/FabricManaBlasterModel.java +4 -12
@@ 23,28 23,23 @@ import java.util.function.Function;
 * Pretty much all of the data of the superclass is ignored.
 */
public class FabricManaBlasterModel extends BlockModel {
	private final ResourceLocation gunNoClip, gunClip, desuGunNoClip, desuGunClip;
	private final ResourceLocation gunNoClip, gunClip;

	public FabricManaBlasterModel(ResourceLocation gunNoClip, ResourceLocation gunClip,
			ResourceLocation desuGunNoClip, ResourceLocation desuGunClip) {
	public FabricManaBlasterModel(ResourceLocation gunNoClip, ResourceLocation gunClip) {
		super(null, Collections.emptyList(), Collections.emptyMap(), false, GuiLight.SIDE, ItemTransforms.NO_TRANSFORMS, Collections.emptyList());
		this.gunNoClip = gunNoClip;
		this.gunClip = gunClip;
		this.desuGunNoClip = desuGunNoClip;
		this.desuGunClip = desuGunClip;
	}

	@Override
	public Collection<ResourceLocation> getDependencies() {
		return List.of(this.gunNoClip, this.gunClip, this.desuGunNoClip, this.desuGunClip);
		return List.of(this.gunNoClip, this.gunClip);
	}

	@Override
	public void resolveParents(Function<ResourceLocation, UnbakedModel> modelGetter) {
		modelGetter.apply(this.gunNoClip).resolveParents(modelGetter);
		modelGetter.apply(this.gunClip).resolveParents(modelGetter);
		modelGetter.apply(this.desuGunNoClip).resolveParents(modelGetter);
		modelGetter.apply(this.desuGunClip).resolveParents(modelGetter);
	}

	@Nullable


@@ 55,7 50,6 @@ public class FabricManaBlasterModel extends BlockModel {
		return ManaBlasterBakedModel.create(
				baker,
				this.gunNoClip, this.gunClip,
				this.desuGunNoClip, this.desuGunClip,
				state);
	}



@@ 67,9 61,7 @@ public class FabricManaBlasterModel extends BlockModel {
				&& loader.getAsString().equals(ClientXplatAbstractions.MANA_GUN_MODEL_LOADER_ID.toString())) {
			return new FabricManaBlasterModel(
					new ResourceLocation(GsonHelper.getAsString(json, "gun_noclip")),
					new ResourceLocation(GsonHelper.getAsString(json, "gun_clip")),
					new ResourceLocation(GsonHelper.getAsString(json, "desu_gun_noclip")),
					new ResourceLocation(GsonHelper.getAsString(json, "desu_gun_clip"))
					new ResourceLocation(GsonHelper.getAsString(json, "gun_clip"))
			);
		}
		return null;

M Forge/src/main/java/vazkii/botania/forge/client/ForgeManaBlasterModel.java => Forge/src/main/java/vazkii/botania/forge/client/ForgeManaBlasterModel.java +4 -11
@@ 20,22 20,17 @@ import vazkii.botania.client.model.ManaBlasterBakedModel;
import java.util.function.Function;

public class ForgeManaBlasterModel implements IUnbakedGeometry<ForgeManaBlasterModel> {
	private final ResourceLocation gunNoClip, gunClip, desuGunNoClip, desuGunClip;
	private final ResourceLocation gunNoClip, gunClip;

	public ForgeManaBlasterModel(ResourceLocation gunNoClip, ResourceLocation gunClip,
			ResourceLocation desuGunNoClip, ResourceLocation desuGunClip) {
	public ForgeManaBlasterModel(ResourceLocation gunNoClip, ResourceLocation gunClip) {
		this.gunNoClip = gunNoClip;
		this.gunClip = gunClip;
		this.desuGunNoClip = desuGunNoClip;
		this.desuGunClip = desuGunClip;
	}

	@Override
	public void resolveParents(Function<ResourceLocation, UnbakedModel> modelGetter, IGeometryBakingContext context) {
		modelGetter.apply(this.gunNoClip).resolveParents(modelGetter);
		modelGetter.apply(this.gunClip).resolveParents(modelGetter);
		modelGetter.apply(this.desuGunNoClip).resolveParents(modelGetter);
		modelGetter.apply(this.desuGunClip).resolveParents(modelGetter);
	}

	@Override


@@ 49,7 44,7 @@ public class ForgeManaBlasterModel implements IUnbakedGeometry<ForgeManaBlasterM
				return transform;
			}
		};
		return ManaBlasterBakedModel.create(baker, this.gunNoClip, this.gunClip, this.desuGunNoClip, this.desuGunClip, state);
		return ManaBlasterBakedModel.create(baker, this.gunNoClip, this.gunClip, state);
	}

	enum Loader implements IGeometryLoader<ForgeManaBlasterModel> {


@@ 60,9 55,7 @@ public class ForgeManaBlasterModel implements IUnbakedGeometry<ForgeManaBlasterM
		public ForgeManaBlasterModel read(JsonObject json, JsonDeserializationContext deserializationContext) {
			return new ForgeManaBlasterModel(
					new ResourceLocation(GsonHelper.getAsString(json, "gun_noclip")),
					new ResourceLocation(GsonHelper.getAsString(json, "gun_clip")),
					new ResourceLocation(GsonHelper.getAsString(json, "desu_gun_noclip")),
					new ResourceLocation(GsonHelper.getAsString(json, "desu_gun_clip"))
					new ResourceLocation(GsonHelper.getAsString(json, "gun_clip"))
			);
		}
	}

M Xplat/src/generated/resources/.cache/ca0b139d7ffbdcad7e28a9e04c29c4ff458197e3 => Xplat/src/generated/resources/.cache/ca0b139d7ffbdcad7e28a9e04c29c4ff458197e3 +0 -1
@@ 1,6 1,5 @@
// 1.20.1	Botania/Advancements
89bb4518bec139b44a7df0f34040b55587072be9 data/botania/advancements/challenge/alf_portal_bread.json
1dd200d6cee400372f1d33232ab452bd9cd34b8e data/botania/advancements/challenge/desu_gun.json
ffc024a6dff385077c6d09e67cb357e1de0efcf8 data/botania/advancements/challenge/flugel_eye.json
2605d2617560e838fcc9e7dcef7f514f04b7a401 data/botania/advancements/challenge/gaia_guardian_hardmode.json
e10869977a695f7df69049ad7e1b0104cefc4c70 data/botania/advancements/challenge/gaia_guardian_no_armor.json

D Xplat/src/generated/resources/data/botania/advancements/challenge/desu_gun.json => Xplat/src/generated/resources/data/botania/advancements/challenge/desu_gun.json +0 -33
@@ 1,33 0,0 @@
{
  "parent": "botania:challenge/root",
  "criteria": {
    "use_gun": {
      "conditions": {
        "desu": true
      },
      "trigger": "botania:fire_mana_blaster"
    }
  },
  "display": {
    "announce_to_chat": true,
    "description": {
      "translate": "advancement.botania:desuGun.desc"
    },
    "frame": "challenge",
    "hidden": false,
    "icon": {
      "item": "botania:mana_gun",
      "nbt": "{display:{Name:'{\"text\":\"desu gun\"}'}}"
    },
    "show_toast": true,
    "title": {
      "translate": "advancement.botania:desuGun"
    }
  },
  "requirements": [
    [
      "use_gun"
    ]
  ],
  "sends_telemetry_event": true
}
\ No newline at end of file

M Xplat/src/main/java/vazkii/botania/client/model/ManaBlasterBakedModel.java => Xplat/src/main/java/vazkii/botania/client/model/ManaBlasterBakedModel.java +3 -16
@@ 36,22 36,17 @@ import vazkii.botania.common.item.ManaBlasterItem;
import java.util.*;

public class ManaBlasterBakedModel extends DelegatedModel {
	private final BakedModel desuGunNoClip;
	private final BakedModel desuGunClip;
	// key is (lens, hasClip). If no lens, the Item is null
	private final Map<Pair<Item, Boolean>, BakedModel> models;

	private ManaBlasterBakedModel(BakedModel desuGunNoClip, BakedModel desuGunClip,
			Map<Pair<Item, Boolean>, BakedModel> models) {
	private ManaBlasterBakedModel(Map<Pair<Item, Boolean>, BakedModel> models) {
		super(models.get(Pair.of(null, false)));
		this.desuGunNoClip = desuGunNoClip;
		this.desuGunClip = desuGunClip;
		this.models = models;
	}

	public static ManaBlasterBakedModel create(ModelBaker baker,
			ResourceLocation gunNoClip, ResourceLocation gunClip,
			ResourceLocation desuGunNoClip, ResourceLocation desuGunClip, ModelState state) {
			ModelState state) {
		BakedModel gunNoClipModel = Preconditions.checkNotNull(baker.bake(gunNoClip, state));
		BakedModel gunClipModel = Preconditions.checkNotNull(baker.bake(gunClip, state));
		Map<Pair<Item, Boolean>, BakedModel> models = new HashMap<>();


@@ 65,11 60,7 @@ public class ManaBlasterBakedModel extends DelegatedModel {
				models.put(Pair.of(item, true), new ManaBlasterBakedModel.CompositeBakedModel(baker, lens, gunClipModel));
			}
		}
		return new ManaBlasterBakedModel(
				baker.bake(desuGunNoClip, state),
				baker.bake(desuGunClip, state),
				models
		);
		return new ManaBlasterBakedModel(models);
	}

	private final ItemOverrides itemHandler = new ItemOverrides() {


@@ 78,10 69,6 @@ public class ManaBlasterBakedModel extends DelegatedModel {
		public BakedModel resolve(BakedModel model, ItemStack stack, @Nullable ClientLevel worldIn, @Nullable LivingEntity entityIn, int seed) {
			boolean clip = ManaBlasterItem.hasClip(stack);

			if (ManaBlasterItem.isSugoiKawaiiDesuNe(stack)) {
				return clip ? ManaBlasterBakedModel.this.desuGunClip : ManaBlasterBakedModel.this.desuGunNoClip;
			}

			ItemStack lens = ManaBlasterItem.getLens(stack);
			Pair<Item, Boolean> key = Pair.of(lens.isEmpty() ? null : lens.getItem(), clip);


M Xplat/src/main/java/vazkii/botania/common/advancements/ManaBlasterTrigger.java => Xplat/src/main/java/vazkii/botania/common/advancements/ManaBlasterTrigger.java +3 -19
@@ 16,9 16,6 @@ import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.item.ItemStack;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import vazkii.botania.common.item.ManaBlasterItem;

import static vazkii.botania.common.lib.ResourceLocationHelper.prefix;



@@ 37,9 34,8 @@ public class ManaBlasterTrigger extends SimpleCriterionTrigger<ManaBlasterTrigge
	@NotNull
	@Override
	public ManaBlasterTrigger.Instance createInstance(@NotNull JsonObject json, ContextAwarePredicate playerPred, DeserializationContext conditions) {
		Boolean desu = json.get("desu") == null ? null : json.get("desu").getAsBoolean();
		return new ManaBlasterTrigger.Instance(playerPred, ItemPredicate.fromJson(json.get("item")),
				EntityPredicate.fromJson(json.get("user")), desu);
				EntityPredicate.fromJson(json.get("user")));
	}

	public void trigger(ServerPlayer player, ItemStack stack) {


@@ 49,14 45,11 @@ public class ManaBlasterTrigger extends SimpleCriterionTrigger<ManaBlasterTrigge
	public static class Instance extends AbstractCriterionTriggerInstance {
		private final ItemPredicate item;
		private final EntityPredicate user;
		@Nullable
		private final Boolean desu;

		public Instance(ContextAwarePredicate entityPred, ItemPredicate count, EntityPredicate user, Boolean desu) {
		public Instance(ContextAwarePredicate entityPred, ItemPredicate count, EntityPredicate user) {
			super(ID, entityPred);
			this.item = count;
			this.user = user;
			this.desu = desu;
		}

		@NotNull


@@ 66,8 59,7 @@ public class ManaBlasterTrigger extends SimpleCriterionTrigger<ManaBlasterTrigge
		}

		boolean test(ItemStack stack, ServerPlayer entity) {
			return this.item.matches(stack) && this.user.matches(entity, entity)
					&& (desu == null || desu == ManaBlasterItem.isSugoiKawaiiDesuNe(stack));
			return this.item.matches(stack) && this.user.matches(entity, entity);
		}

		@Override


@@ 79,9 71,6 @@ public class ManaBlasterTrigger extends SimpleCriterionTrigger<ManaBlasterTrigge
			if (user != EntityPredicate.ANY) {
				json.add("user", user.serializeToJson());
			}
			if (desu != null) {
				json.addProperty("desu", desu);
			}
			return json;
		}



@@ 92,10 81,5 @@ public class ManaBlasterTrigger extends SimpleCriterionTrigger<ManaBlasterTrigge
		public EntityPredicate getUser() {
			return this.user;
		}

		@Nullable
		public Boolean getDesu() {
			return this.desu;
		}
	}
}

M Xplat/src/main/java/vazkii/botania/common/item/ManaBlasterItem.java => Xplat/src/main/java/vazkii/botania/common/item/ManaBlasterItem.java +0 -18
@@ 98,24 98,6 @@ public class ManaBlasterItem extends Item {
		return InteractionResultHolder.pass(stack);
	}

	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	// ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN
	public static boolean isSugoiKawaiiDesuNe(ItemStack stack) {
		return stack.getHoverName().getString().equalsIgnoreCase("desu gun");
	}

	@NotNull
	public BurstProperties getBurstProps(Player player, ItemStack stack, boolean request, InteractionHand hand) {
		int maxMana = 120;

M Xplat/src/main/java/vazkii/botania/data/AdvancementProvider.java => Xplat/src/main/java/vazkii/botania/data/AdvancementProvider.java +1 -9
@@ 182,7 182,7 @@ public class AdvancementProvider {
			Advancement.Builder.advancement()
					.display(simple(BotaniaItems.manaGun, "manaBlasterShoot", FrameType.TASK))
					.parent(runePickup)
					.addCriterion("shoot", new ManaBlasterTrigger.Instance(ContextAwarePredicate.ANY, ItemPredicate.ANY, EntityPredicate.ANY, null))
					.addCriterion("shoot", new ManaBlasterTrigger.Instance(ContextAwarePredicate.ANY, ItemPredicate.ANY, EntityPredicate.ANY))
					.save(consumer, mainId("mana_blaster_shoot"));
			Advancement.Builder.advancement()
					.display(simple(BotaniaFlowerBlocks.pollidisiac, "pollidisiacPickup", FrameType.TASK))


@@ 377,14 377,6 @@ public class AdvancementProvider {
					.addCriterion("flower", onPickup(BotaniaBlocks.motifDaybloom, BotaniaBlocks.motifNightshade))
					.requirements(RequirementsStrategy.OR)
					.save(consumer, challengeId("old_flower_pickup"));
			DisplayInfo desuGun = simple(BotaniaItems.manaGun, "desuGun", FrameType.CHALLENGE);
			desuGun.getIcon().setHoverName(Component.literal("desu gun"));
			Advancement.Builder.advancement()
					.display(desuGun)
					.parent(root)
					.addCriterion("use_gun", new ManaBlasterTrigger.Instance(
							ContextAwarePredicate.ANY, ItemPredicate.ANY, EntityPredicate.ANY, true))
					.save(consumer, challengeId("desu_gun"));
			Advancement.Builder.advancement()
					.display(simple(BotaniaBlocks.corporeaIndex, "superCorporeaRequest", FrameType.CHALLENGE))
					.parent(root)

M Xplat/src/main/resources/assets/botania/lang/en_us.json => Xplat/src/main/resources/assets/botania/lang/en_us.json +0 -2
@@ 504,8 504,6 @@
  "advancement.botania:old_flower_pickup": "Deja Vu",
  "advancement.botania:old_flower_pickup.desc": "Discover the Daybloom Motif or Nightshade Motif",

  "advancement.botania:desuGun": "Two-Faced Lovers",
  "advancement.botania:desuGun.desc": "ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN",
  "advancement.botania:tinyPotatoBirthday": "Blessing",
  "advancement.botania:tinyPotatoBirthday.desc": "Celebrate Tiny Potato's Birthday on July 19th",


M Xplat/src/main/resources/assets/botania/lang/es_es.json => Xplat/src/main/resources/assets/botania/lang/es_es.json +0 -1
@@ 276,7 276,6 @@
  "advancement.botania:lokiRing": "Aritmética",
  "advancement.botania:lokiRing.desc": "Se recompensado con el anillo de Loki",

  "advancement.botania:desuGun": "Amante de dos caras.",

  "botania.challengelevel.easy": "Fácil",
  "botania.challengelevel.normal": "Normal",

M Xplat/src/main/resources/assets/botania/lang/fr_fr.json => Xplat/src/main/resources/assets/botania/lang/fr_fr.json +0 -2
@@ 574,8 574,6 @@
  "advancement.botania:old_flower_pickup": "Déjà-vu",
  "advancement.botania:old_flower_pickup.desc": "Découvrez un motif Fleurjour ou un motif Ombrenuit",

  "advancement.botania:desuGun": "nya nya nya",
  "advancement.botania:desuGun.desc": "ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN",

  "advancement.botania:tinyPotatoBirthday": "Un grand jour",
  "advancement.botania:tinyPotatoBirthday.desc": "Célébrez l'anniversaire de la petite patate un 19 juillet",

M Xplat/src/main/resources/assets/botania/lang/ja_jp.json => Xplat/src/main/resources/assets/botania/lang/ja_jp.json +0 -2
@@ 494,8 494,6 @@
	"advancement.botania:old_flower_pickup": "Deja Vu",
	"advancement.botania:old_flower_pickup.desc": "デイブルームモチーフまたはナイトシェイドモチーフを発見する",

	"advancement.botania:desuGun": "裏表ラバーズ",
	"advancement.botania:desuGun.desc": "アサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサン",
	"advancement.botania:tinyPotatoBirthday": "Blessing",
	"advancement.botania:tinyPotatoBirthday.desc": "7月19日に小さなポテトの誕生日をお祝いしよう",


M Xplat/src/main/resources/assets/botania/lang/ko_kr.json => Xplat/src/main/resources/assets/botania/lang/ko_kr.json +0 -1
@@ 248,7 248,6 @@
  "advancement.botania:odinRing.desc": "영웅적인 위업을 달성해서 오딘의 반지를 획득해보세요",
  "advancement.botania:lokiRing.desc": "영웅적인 위업을 달성해서 로키의 반지를 획득해보세요",

  "advancement.botania:desuGun": "겉과 속이 다른 러버즈",

  "botania.challengelevel.easy": "쉬움",
  "botania.challengelevel.normal": "보통",

M Xplat/src/main/resources/assets/botania/lang/nl_nl.json => Xplat/src/main/resources/assets/botania/lang/nl_nl.json +0 -1
@@ 309,7 309,6 @@
  "advancement.botania:lokiRing": "Rekenkunst",
  "advancement.botania:lokiRing.desc": "Verdien de Ring van Loki voor een heldhaftige daad",

  "advancement.botania:desuGun": "Tweezijdige Liefde",

  "botania.challengelevel.easy": "Makkelijk",
  "botania.challengelevel.normal": "Normaal",

M Xplat/src/main/resources/assets/botania/lang/ru_ru.json => Xplat/src/main/resources/assets/botania/lang/ru_ru.json +0 -1
@@ 384,7 384,6 @@
  "advancement.botania:old_flower_pickup": "Deja Vu!!!",
  "advancement.botania:old_flower_pickup.desc": "Откройте для себя мотив Днецвета или мотив Ночного паслена",

  "advancement.botania:desuGun": "Двуликие Любовники",

  "botania.challengelevel.easy": "Легкий",
  "botania.challengelevel.normal": "Средний",

M Xplat/src/main/resources/assets/botania/lang/zh_cn.json => Xplat/src/main/resources/assets/botania/lang/zh_cn.json +0 -2
@@ 505,8 505,6 @@
  "advancement.botania:old_flower_pickup": "逮虾户",
  "advancement.botania:old_flower_pickup.desc": "发现装饰用太阳花或装饰用夜颠茄",

  "advancement.botania:desuGun": "裏表ラバーズ",
  "advancement.botania:desuGun.desc": "ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN ASADA-SAN",
  "advancement.botania:tinyPotatoBirthday": "Blessing",
  "advancement.botania:tinyPotatoBirthday.desc": "7月19日,庆祝小土豆的生日",


M Xplat/src/main/resources/assets/botania/lang/zh_tw.json => Xplat/src/main/resources/assets/botania/lang/zh_tw.json +0 -2
@@ 323,8 323,6 @@
  "advancement.botania:lokiRing": "Arithmetic",
  "advancement.botania:lokiRing.desc": "獲得戰利品:洛基之戒",

  "advancement.botania:desuGun": "裏表ラバーズ",
  "advancement.botania:desuGun.desc": "アサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサンアサダサン",

  "botania.challengelevel.easy": "簡單",
  "botania.challengelevel.normal": "普通",

D Xplat/src/main/resources/assets/botania/models/item/desu_gun_clip.json => Xplat/src/main/resources/assets/botania/models/item/desu_gun_clip.json +0 -7
@@ 1,7 0,0 @@
{
  "parent": "minecraft:item/handheld",
  "textures": {
    "layer0": "botania:item/desu_gun_clip",
    "layer1": "botania:item/desu_gun_overlay"
  }
}

D Xplat/src/main/resources/assets/botania/models/item/desu_gun_noclip.json => Xplat/src/main/resources/assets/botania/models/item/desu_gun_noclip.json +0 -7
@@ 1,7 0,0 @@
{
  "parent": "minecraft:item/handheld",
  "textures": {
    "layer0": "botania:item/desu_gun",
    "layer1": "botania:item/desu_gun_overlay"
  }
}

M Xplat/src/main/resources/assets/botania/models/item/mana_gun.json => Xplat/src/main/resources/assets/botania/models/item/mana_gun.json +1 -3
@@ 1,7 1,5 @@
{
  "loader": "botania:mana_gun",
  "gun_noclip": "botania:item/mana_gun_noclip",
  "gun_clip": "botania:item/mana_gun_clip",
  "desu_gun_noclip": "botania:item/desu_gun_noclip",
  "desu_gun_clip": "botania:item/desu_gun_clip"
  "gun_clip": "botania:item/mana_gun_clip"
}

D Xplat/src/main/resources/assets/botania/textures/item/desu_gun.png => Xplat/src/main/resources/assets/botania/textures/item/desu_gun.png +0 -0
D Xplat/src/main/resources/assets/botania/textures/item/desu_gun_clip.png => Xplat/src/main/resources/assets/botania/textures/item/desu_gun_clip.png +0 -0
D Xplat/src/main/resources/assets/botania/textures/item/desu_gun_overlay.png => Xplat/src/main/resources/assets/botania/textures/item/desu_gun_overlay.png +0 -0
M doc/omake.md => doc/omake.md +15 -12
@@ 465,6 465,7 @@ people online (often getting into pointless debates about programming languages 
Heisei Dream), and watching nerdy TV shows.

## Shulk Me Not
### Professional Gamer Girl Flower
* Gender: Female (she/her)
* Physical symbols: Crown
* Likes: Esports, Touhou, osu!


@@ 489,6 490,7 @@ with Pure Daisy, and when not busy with work the two can often be found testing 
danmaku skills against each other in *Touhou 9: Phantasmagoria of Flower View*.

## Jaded Amaranthus
### Slow-Living Amaranthoidae
* Gender: Male (he/him)
* Physical symbols: A sigh of relief
* Likes: Simplicity, intentional communication


@@ 619,9 621,10 @@ all approved of their methods, but to many, they were heroes.
successful heist, the question resurfaced nebulously in her mind...

## Heisei Dream
### Whimsical Social Scholar
* Gender: Hot topic of debate on many forums they frequent; they give a different response
  to each inquiry
* Physical symbols: :trolled: emote
* Physical symbols: Troll face (classical 2008 version)
* Likes: KenM, Rick Astley (they're an actual fan of his music), The Onion
* Dislikes: Fake "trolling" (most of their friend-group's been subjected to the "shouting
  slurs doesn't count" rant at least thrice)


@@ 637,6 640,7 @@ When not trolling, Heisei Dream takes their studies in internet sociology surpri
seriously.

## Tigerseye
### Keen Pursuer of Truth
* Gender: Cat person
* Physical symbols: Pusheen
* Likes: Cats, Miles Edgeworth from *Ace Attorney*


@@ 669,6 673,7 @@ Idea: miner
Idea: Orechid's senior

## Fallen Kanade
### Freeze-Immune Bud
* Gender: Canadian
* Physical symbols: Maple syrup (only the best)
* Likes: Their mates


@@ 691,6 696,7 @@ polite and friendly, but knows when to assert themself when things come down to 
Overall a very pleasant mate to hang out with.

## Exoflame
### Exothermic and Exuberant Ear
* Gender: Tastefully done eyeliner that renders their features extra androgynous
* Physical symbols: a party hat, but specifically the one from OSRS
* Likes: Meeting new people, helping friends in need, Endoflame


@@ 719,19 725,17 @@ nearly everybody they know.
* Likes:
* Dislikes: 

## Tangleberrie
* Gender:
* Physical symbols:
* Likes:
* Dislikes: 
## Tangleberrie & Jiyuulia
### Lackadaisical Guardian Twins
* Gender: Male
* Physical symbols: Velcro
* Likes: Their jobs, each other
* Dislikes: The paperwork that happens when they make mistakes on the job


## Jiyuulia
* Gender:
* Physical symbols:
* Likes:
* Dislikes:

## Labellia
### Archivist of Leaves and Lore
* Gender: Book (they/them)
* Physical symbols: Brain
* Likes: Physical media (books, CD's, tapes, game cartridges, etc.), Munchdew


@@ 1092,7 1096,6 @@ WARNING: Some songs are 18+ and inappropriate for children.
| Name                                       | Requirement                                    | Link                                                       |
|--------------------------------------------|------------------------------------------------|------------------------------------------------------------|
| Deja Vu                                    | Craft Daybloom/NightShade Motif                | [https://vocadb.net/S/124258](https://vocadb.net/S/124258) |
| Two-Faced Lovers                           | Shoot desu gun                                 | [https://vocadb.net/S/1508](https://vocadb.net/S/1508)     |
| At the Mercy of a Dream                    | Defeat Gaia Guardian II                        | [https://vocadb.net/S/14929](https://vocadb.net/S/14929)   |
| A Tale of Six Trillion Years and One Night | Use rank SS terra pick                         | [https://vocadb.net/S/11219](https://vocadb.net/S/11219)   |
| Invader Girl                               | Complete a corporea request with >= 50k items  | [https://vocadb.net/S/63216](https://vocadb.net/S/63216)   |

M web/changelog.md => web/changelog.md +2 -1
@@ 20,9 20,10 @@ and start a new "Upcoming" section.

* Port to 1.19.4
* Add: Manufactory Halo shows active status in its icon (Wormbo)
* Add: Tuff now convertable by Marimorphosis
* Change: Key of the King's Law no longer hurts items or most other nonliving entities
* Change: Removed desu gun and its associated advancement. The reference has overstayed its welcome.
* Fix: Ender Air emission not being mentioned in Pure Daisy entry (Wormbo)
* Add: Tuff now convertable by Marimorphosis


---