Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10f1ac7682 |
@@ -1,22 +1,71 @@
|
||||
# Changelog
|
||||
## [1.7.2 (MONTH Xth, YEAR)](#1-7-2)
|
||||
## [1.7.1 (MONTH xth, 2025)](#1-7-1)
|
||||
|
||||
### Additions
|
||||
- Added trades for Saccharine Saplings, Hearty Grains, Chipped Pot, and Masterpiece Teacup to the Wandering Trader.
|
||||
- Added brewing recipe for Throat Spray.
|
||||
|
||||
### Changes
|
||||
- Converted the riding freelook button to a configurable keybinding.
|
||||
- Reduced the cost of the Vivichoke Seed trade with the Wandering Trader.
|
||||
- Convert the riding freelook button to a configurable keybinding
|
||||
- Reduced cost of the Vivichoke Seed trade with the Wandering Trader
|
||||
- Add double tap to sprint on land mounts
|
||||
- Add vanilla sprinting fov to pokemon land mounts
|
||||
|
||||
### Fixes
|
||||
- Fixed orientation not getting reset after crashing while flying and getting back on the Pokémon.
|
||||
- Fixed Furfrou not being trimmable on NeoForge.
|
||||
- Fixed honey from Saccharine Leaves being harvestable at less than the max age.
|
||||
- Items given from interacting with Saccharine Leaves are placed in the active hotbar slot if possible.
|
||||
- Fix all Pokémon being saved to chunks and never despawning.
|
||||
- Prevent displaying ride controls overlay to passengers.
|
||||
- Fixed player suffocation on vanilla mounts experienced on some worlds.
|
||||
- Fixed Poké Snack spawning sounds not coming from the block.
|
||||
- Fix player suffocation on vanilla mounts experienced on some worlds.
|
||||
- Stop passengers from hearing the shiny noise of a ridden shiny Pokémon.
|
||||
- Fixed incorrect camera pivot on Bird, Jet, and Dolphin mounts.
|
||||
- Fixed Poké Snack spawning sound positioning.
|
||||
- Ponigiri can no longer be eaten at full hunger.
|
||||
- Medicinal Brew's Campfire Pot recipe now correctly displays that it can be made using an empty glass bottle or a filled bottle.
|
||||
- Fixed a crash when you place a block in the way of hearty grains 2nd block
|
||||
- Fixed a graphics crash that could occur on some machines when campfires were nearby.
|
||||
- Fixed glass bottle not being returned when honey-ing a saccharine leaf block
|
||||
- Fixed Combees not depositing honey upon leaving a hive if they entered with nectar.
|
||||
- Fixed pastured Combees not moving in night or rain.
|
||||
- Fixed a case in which a Combee might try to path to a flower that no longer exists.
|
||||
- Fixed Combees attempting to enter a full hive.
|
||||
- Fixed a crash involving Combees and hives.
|
||||
- Fixed crashing and rendering issues when opening a PC box with certain wallpapers.
|
||||
- Fixed a crash when opening a PC box with certain wallpapers while using *VulkanMod*.
|
||||
- Fixed a glitch where friendship would reset to the default value when evolving a Pokémon.
|
||||
- Fixed a crashed related to NPC navigation.
|
||||
- Fix player suffocation on vanilla mounts experienced on some worlds.
|
||||
- Stop passengers from hearing the shiny noise of a ridden shiny Pokémon.
|
||||
- Fixed friendship resetting to the default value when evolving a Pokémon.
|
||||
- Fixed a bunch of incompatibilities with NeoForge mods
|
||||
- Fixed a bug where wind charges hitting pasture blocks would recall all pokémon in it.
|
||||
- Home on the Range advancement shouldn't trigger when opening the Pokemon Menu (shift interact one, mr changelog guy)
|
||||
- Recipes using concrete should now work on NeoForge
|
||||
- Fixed saccharine hanging signs sometimes dropping their oak wood counterpart when being broken
|
||||
- Fix player suffocation on vanilla mounts experienced on some worlds
|
||||
- Stop passengers from hearing the shiny noise of a ridden shiny pokemon
|
||||
- Ponigiri can no longer be eaten at full hunger
|
||||
- Medicinal Brew's Campfire Pot recipe now correctly displays that it can be made using an empty glass bottle or a filled bottle
|
||||
- Fix incorrect camera pivot on Bird, Jet, and Dolphin mounts.
|
||||
- Fix mount jumping so it doesn't switch back to ground animations
|
||||
- Fix ridden pokemon land collision and weird step up issues. Land mounts are smoother overall now.
|
||||
- Fixed Boltund's model
|
||||
- Fixed Cyclizar's textures
|
||||
- Fixed Furfrou's pink and magenta trims being swapped
|
||||
|
||||
### Developer
|
||||
|
||||
### Molang & Datapacks
|
||||
- Removed automatic generation of PC wallpaper screen glow if no asset is provided; it is now optional.
|
||||
|
||||
### Particles
|
||||
|
||||
### Localization
|
||||
- Updated translations for:
|
||||
- Updated translations for:
|
||||
- French
|
||||
- Japanese
|
||||
- Korean
|
||||
- Brazilian Portuguese
|
||||
- Simplified Chinese
|
||||
- Traditional Chinese
|
||||
@@ -1,61 +0,0 @@
|
||||
# Changelog
|
||||
## [1.7.1 (November 29th, 2025)](#1-7-1)
|
||||
|
||||
### Additions
|
||||
- Added trades for Saccharine Saplings, Hearty Grains, Chipped Pot, and Masterpiece Teacup to the Wandering Trader.
|
||||
- Added brewing recipe for Throat Spray.
|
||||
- Added vanilla sprinting's field of view change to Pokémon land mounts.
|
||||
- Added a customizable keybind for the riding freelook button.
|
||||
- Added double tap to sprint on land mounts.
|
||||
|
||||
### Changes
|
||||
- Made Jet pitch turning 1.5x faster across all Pokémon.
|
||||
- Party Pokémon now attack only mobs that are attacking their owner, instead of randomly targeting unrelated mobs and getting themselves hurt.
|
||||
- Reduced the cost of the Vivichoke Seed trade with the Wandering Trader.
|
||||
|
||||
### Fixes
|
||||
- Fixed incorrect camera pivot on Bird, Jet, and Dolphin mounts, leading to some disorienting riding.
|
||||
- Fixed players suffocating while on vanilla mounts.
|
||||
- Fixed a graphics crash that could occur on some machines when campfire pots were nearby.
|
||||
- Fixed ride controls overlay being displayed to passengers. The passengers probably don't need to know about those.
|
||||
- Fixed mount jumping so that it doesn't switch back to ground animations.
|
||||
- Fixed ridden Pokémon land collision and some issues around stepping up blocks. Land mounts are smoother overall now.
|
||||
- Fixed Furfrou's pink and magenta trims being swapped. Only a man could make that mistake.
|
||||
- Fixed friendship being reset to the default value when evolving a Pokémon.
|
||||
- Fixed Combees not depositing honey upon leaving a hive if they entered it with nectar.
|
||||
- Fixed pastured Combees not moving during the night or in rain.
|
||||
- Fixed a case in which a Combee might try to path to a flower that no longer exists.
|
||||
- Fixed Combees attempting to enter a full hive.
|
||||
- Fixed a crash involving Combees and hives. 500 bee bugs. Bugged bees? We can be bees. Mark, this is good news.
|
||||
- Fixed a crash related to NPC navigation.
|
||||
- Fixed a crash when opening a PC box with certain wallpapers while using *VulkanMod*.
|
||||
- Fixed a crash when you place a block in the way of hearty grains 2nd block.
|
||||
- Fixed passengers hearing the shiny noise of a ridden shiny Pokémon.
|
||||
- Ponigiri can no longer be eaten at full hunger.
|
||||
- Fixed Poké Snack spawning sounds not coming from the block.
|
||||
- Medicinal Brew's Campfire Pot recipe now correctly displays that it can be made using an empty glass bottle or a filled bottle.
|
||||
- Fixed glass bottle not being returned when slathering honey on a saccharine leaf block.
|
||||
- Fixed saccharine hanging signs sometimes dropping their oak wood counterpart when being broken.
|
||||
- Fixed a bunch of incompatibilities with NeoForge mods.
|
||||
- Fixed a bug where wind charges hitting pasture blocks would recall all Pokémon in it.
|
||||
- Fixed the Home on the Range advancement triggering when opening the Pokémon interaction wheel.
|
||||
- Fixed recipes that use concrete not working on NeoForge.
|
||||
- Fixed Boltund's model.
|
||||
- Fixed Cyclizar's textures.
|
||||
|
||||
### Developer
|
||||
|
||||
### Molang & Datapacks
|
||||
- Removed automatic generation of PC wallpaper screen glow if no asset is provided; it is now optional.
|
||||
- This is because there's no practical way to do this without blowing up things like *VulkanMod*.
|
||||
|
||||
### Particles
|
||||
|
||||
### Localization
|
||||
- Updated translations for:
|
||||
- French
|
||||
- Japanese
|
||||
- Korean
|
||||
- Brazilian Portuguese
|
||||
- Simplified Chinese
|
||||
- Traditional Chinese
|
||||
@@ -19,6 +19,7 @@ import com.cobblemon.mod.common.mixin.accessor.TrackedEntityAccessor;
|
||||
import com.cobblemon.mod.common.net.messages.client.orientation.ClientboundUpdateDriverInputPacket;
|
||||
import com.cobblemon.mod.common.net.messages.client.orientation.ClientboundUpdateOrientationPacket;
|
||||
import com.cobblemon.mod.common.net.messages.client.pokemon.update.ClientboundUpdateRidingStatePacket;
|
||||
import com.cobblemon.mod.common.net.messages.client.riding.ClientboundGrabEntityPacket;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.server.level.ChunkMap;
|
||||
@@ -43,22 +44,27 @@ import java.util.function.Consumer;
|
||||
@Mixin(ServerEntity.class)
|
||||
public abstract class ServerEntityMixin {
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
private Consumer<Packet<?>> broadcast;
|
||||
@Shadow
|
||||
@Final
|
||||
private Entity entity;
|
||||
@Unique
|
||||
private Matrix3f cobblemon$lastSentOrientation;
|
||||
@Unique
|
||||
private boolean cobblemon$lastSentActive;
|
||||
@Shadow @Final private Consumer<Packet<?>> broadcast;
|
||||
@Shadow @Final private Entity entity;
|
||||
@Unique private Matrix3f cobblemon$lastSentOrientation;
|
||||
@Unique private boolean cobblemon$lastSentActive;
|
||||
@Unique private Entity cobblemon$lastSentGrabbedEntity;
|
||||
|
||||
@Inject(method = "sendChanges", at = @At("TAIL"))
|
||||
private void cobblemon$sendChanges(CallbackInfo ci) {
|
||||
cobblemon$sendOrientationChanges();
|
||||
cobblemon$sendRidingStateChanges();
|
||||
cobblemon$sendDriverInput();
|
||||
cobblemon$sendGrabbedEntityChanges();
|
||||
}
|
||||
|
||||
private void cobblemon$sendGrabbedEntityChanges() {
|
||||
if (!(this.entity instanceof PokemonEntity pokemonEntity)) return;
|
||||
if (pokemonEntity.getEntityHook() != cobblemon$lastSentGrabbedEntity) {
|
||||
var entityId = pokemonEntity.getEntityHook() == null ? null : pokemonEntity.getEntityHook().getId();
|
||||
cobblemon$broadcast(new ClientboundGrabEntityPacket(pokemonEntity.getId(), entityId));
|
||||
cobblemon$lastSentGrabbedEntity = pokemonEntity.getEntityHook();
|
||||
}
|
||||
}
|
||||
|
||||
private void cobblemon$sendRidingStateChanges() {
|
||||
|
||||
@@ -22,10 +22,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
@Mixin(LivingEntityRenderer.class)
|
||||
public class LivingEntityRendererMixin<T extends LivingEntity, M extends EntityModel<T>> {
|
||||
|
||||
@Inject(
|
||||
method = "setupRotations",
|
||||
at = @At("HEAD")
|
||||
)
|
||||
@Inject(method = "setupRotations", at = @At("HEAD"))
|
||||
private void cobblemon$modifyRoll(LivingEntity entity, PoseStack poseStack, float bob, float yBodyRot, float partialTick, float scale, CallbackInfo ci) {
|
||||
if (entity.isPassenger()) {
|
||||
var vehicle = entity.getVehicle();
|
||||
@@ -34,4 +31,5 @@ public class LivingEntityRendererMixin<T extends LivingEntity, M extends EntityM
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -194,7 +194,6 @@ object Cobblemon {
|
||||
implementation.registerSoundEvents()
|
||||
implementation.registerDataComponents()
|
||||
implementation.registerBlocks()
|
||||
implementation.registerArmorMaterials()
|
||||
implementation.registerItems()
|
||||
implementation.registerEntityTypes()
|
||||
implementation.registerEntityAttributes()
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
package com.cobblemon.mod.common
|
||||
|
||||
import com.cobblemon.mod.common.platform.PlatformRegistry
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.world.item.ArmorItem
|
||||
import net.minecraft.world.item.ArmorMaterial
|
||||
import net.minecraft.world.item.Items
|
||||
import net.minecraft.world.item.crafting.Ingredient
|
||||
|
||||
@Suppress("unused")
|
||||
object CobblemonArmorMaterials :
|
||||
PlatformRegistry<Registry<ArmorMaterial>, ResourceKey<Registry<ArmorMaterial>>, ArmorMaterial>() {
|
||||
|
||||
override val registry: Registry<ArmorMaterial> = BuiltInRegistries.ARMOR_MATERIAL
|
||||
override val resourceKey: ResourceKey<Registry<ArmorMaterial>> = Registries.ARMOR_MATERIAL
|
||||
|
||||
@JvmField
|
||||
val MALICIOUS_ARMOR = cosmeticMaterial("malicious_armor")
|
||||
@JvmField
|
||||
val HEAVY_DUTY_BOOTS = cosmeticMaterial("heavy_duty_boots")
|
||||
@JvmField
|
||||
val PROTECTIVE_PADS = cosmeticMaterial("protective_pads")
|
||||
@JvmField
|
||||
val ASSAULT_VEST = cosmeticMaterial("assault_vest")
|
||||
@JvmField
|
||||
val MYSTIC_WATER = cosmeticMaterial("mystic_water")
|
||||
@JvmField
|
||||
val BLACK_BELT = cosmeticMaterial("black_belt")
|
||||
|
||||
private fun cosmeticMaterial(name: String): ArmorMaterial {
|
||||
val armorMaterial = ArmorMaterial(
|
||||
mapOf(
|
||||
ArmorItem.Type.HELMET to 0,
|
||||
ArmorItem.Type.CHESTPLATE to 0,
|
||||
ArmorItem.Type.LEGGINGS to 0,
|
||||
ArmorItem.Type.BOOTS to 0,
|
||||
),
|
||||
0,
|
||||
SoundEvents.ARMOR_EQUIP_GENERIC,
|
||||
{ Ingredient.EMPTY },
|
||||
listOf(ArmorMaterial.Layer(cobblemonResource(name), "", true)),
|
||||
0.0f,
|
||||
0.0f,
|
||||
)
|
||||
|
||||
return create(name, armorMaterial)
|
||||
}
|
||||
}
|
||||
@@ -64,8 +64,6 @@ interface CobblemonImplementation {
|
||||
|
||||
fun registerEntityDataSerializers()
|
||||
|
||||
fun registerArmorMaterials()
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
|
||||
@@ -44,21 +44,16 @@ import com.cobblemon.mod.common.pokeball.PokeBall
|
||||
import com.cobblemon.mod.common.pokemon.IVs
|
||||
import com.cobblemon.mod.common.pokemon.helditem.CobblemonHeldItemManager
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.core.Holder
|
||||
import net.minecraft.core.Registry
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.sounds.SoundEvents
|
||||
import net.minecraft.world.effect.MobEffectInstance
|
||||
import net.minecraft.world.effect.MobEffects
|
||||
import net.minecraft.world.entity.EquipmentSlot
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.food.FoodProperties
|
||||
import net.minecraft.world.item.ArmorItem
|
||||
import net.minecraft.world.item.ArmorMaterial
|
||||
import net.minecraft.world.item.BlockItem
|
||||
import net.minecraft.world.item.HangingSignItem
|
||||
import net.minecraft.world.item.Item
|
||||
@@ -506,6 +501,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField val RAZOR_CLAW = noSettingsItem("razor_claw")
|
||||
@JvmField val RAZOR_FANG = noSettingsItem("razor_fang")
|
||||
@JvmField val AUSPICIOUS_ARMOR = heldItem("auspicious_armor")
|
||||
@JvmField val MALICIOUS_ARMOR = heldItem("malicious_armor")
|
||||
@JvmField val SHELL_HELMET = heldItem("shell_helmet")
|
||||
@JvmField val METAL_ALLOY = noSettingsItem("metal_alloy")
|
||||
@JvmField val SCROLL_OF_DARKNESS = noSettingsItem("scroll_of_darkness")
|
||||
@JvmField val SCROLL_OF_WATERS = noSettingsItem("scroll_of_waters")
|
||||
@@ -895,8 +892,7 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
val WATER_STONE = noSettingsItem("water_stone")
|
||||
|
||||
val wearables = mutableListOf<WearableItem>()
|
||||
|
||||
// Wearable items (these items should have a corresponding 3D model)
|
||||
//Wearable items (these items should have a corresponding 3D model)
|
||||
@JvmField val BLACK_GLASSES = wearableItem("black_glasses")
|
||||
@JvmField val CHOICE_BAND = wearableItem("choice_band")
|
||||
@JvmField val CHOICE_SPECS = wearableItem("choice_specs")
|
||||
@@ -907,20 +903,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField val ROCKY_HELMET = wearableItem("rocky_helmet")
|
||||
@JvmField val SAFETY_GOGGLES = wearableItem("safety_goggles")
|
||||
@JvmField val WISE_GLASSES = wearableItem("wise_glasses")
|
||||
@JvmField val SHELL_HELMET = wearableItem("shell_helmet")
|
||||
|
||||
@JvmField
|
||||
val MALICIOUS_ARMOR = armorItem("malicious_armor", CobblemonArmorMaterials.MALICIOUS_ARMOR, ArmorItem.Type.CHESTPLATE)
|
||||
@JvmField
|
||||
val HEAVY_DUTY_BOOTS = armorItem("heavy_duty_boots", CobblemonArmorMaterials.HEAVY_DUTY_BOOTS, ArmorItem.Type.BOOTS)
|
||||
@JvmField
|
||||
val PROTECTIVE_PADS = armorItem("protective_pads", CobblemonArmorMaterials.PROTECTIVE_PADS, ArmorItem.Type.CHESTPLATE)
|
||||
@JvmField
|
||||
val ASSAULT_VEST = armorItem("assault_vest", CobblemonArmorMaterials.ASSAULT_VEST, ArmorItem.Type.CHESTPLATE)
|
||||
@JvmField
|
||||
val MYSTIC_WATER = armorItem("mystic_water", CobblemonArmorMaterials.MYSTIC_WATER, ArmorItem.Type.CHESTPLATE)
|
||||
@JvmField
|
||||
val BLACK_BELT = armorItem("black_belt", CobblemonArmorMaterials.BLACK_BELT, ArmorItem.Type.CHESTPLATE)
|
||||
|
||||
// Held Items
|
||||
@JvmField
|
||||
@@ -930,10 +912,14 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val AIR_BALLOON = heldItem("air_balloon")
|
||||
@JvmField
|
||||
val ASSAULT_VEST = heldItem("assault_vest")
|
||||
@JvmField
|
||||
val BIG_ROOT = compostableBlockItem("big_root", CobblemonBlocks.BIG_ROOT, 0.30f)
|
||||
@JvmField
|
||||
val BINDING_BAND = heldItem("binding_band")
|
||||
@JvmField
|
||||
val BLACK_BELT = heldItem("black_belt")
|
||||
@JvmField
|
||||
val BLACK_SLUDGE = heldItem("black_sludge")
|
||||
@JvmField
|
||||
val BLUNDER_POLICY = heldItem("blunder_policy")
|
||||
@@ -980,6 +966,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val HARD_STONE = heldItem("hard_stone")
|
||||
@JvmField
|
||||
val HEAVY_DUTY_BOOTS = heldItem("heavy_duty_boots")
|
||||
@JvmField
|
||||
val IRON_BALL = heldItem("iron_ball")
|
||||
@JvmField
|
||||
val LAGGING_TAIL = heldItem("lagging_tail")
|
||||
@@ -1004,6 +992,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val MIRACLE_SEED = heldItem("miracle_seed")
|
||||
@JvmField
|
||||
val MYSTIC_WATER = heldItem("mystic_water")
|
||||
@JvmField
|
||||
val NEVER_MELT_ICE = heldItem("never_melt_ice")
|
||||
@JvmField
|
||||
val POISON_BARB = heldItem("poison_barb")
|
||||
@@ -1022,6 +1012,8 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
@JvmField
|
||||
val PSYCHIC_SEED = heldItem("psychic_seed")
|
||||
@JvmField
|
||||
val PROTECTIVE_PADS = heldItem("protective_pads")
|
||||
@JvmField
|
||||
val PUNCHING_GLOVE = heldItem("punching_glove")
|
||||
@JvmField
|
||||
val QUICK_CLAW = heldItem("quick_claw")
|
||||
@@ -1499,13 +1491,9 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
return item
|
||||
}
|
||||
|
||||
private fun wearableItem(
|
||||
name: String,
|
||||
heldItemRemappedName: String? = null,
|
||||
equipmentSlot: EquipmentSlot = EquipmentSlot.HEAD,
|
||||
): CobblemonItem = create(
|
||||
private fun wearableItem(name: String, heldItemRemappedName: String? = null): CobblemonItem = create(
|
||||
name,
|
||||
WearableItem(name, equipmentSlot).also {
|
||||
WearableItem(name).also {
|
||||
wearables.add(it)
|
||||
if (heldItemRemappedName != null) {
|
||||
CobblemonHeldItemManager.registerRemap(it, heldItemRemappedName)
|
||||
@@ -1513,21 +1501,6 @@ object CobblemonItems : PlatformRegistry<Registry<Item>, ResourceKey<Registry<It
|
||||
}
|
||||
)
|
||||
|
||||
private fun armorItem(
|
||||
name: String,
|
||||
armorMaterial: ArmorMaterial,
|
||||
armorType: ArmorItem.Type,
|
||||
durability: Int? = null,
|
||||
): ArmorItem {
|
||||
var properties = Properties()
|
||||
if (durability != null) properties = properties.durability(durability)
|
||||
val armorMaterialHolder = BuiltInRegistries.ARMOR_MATERIAL.wrapAsHolder(armorMaterial)
|
||||
|
||||
val armorItem = ArmorItem(armorMaterialHolder, armorType, properties)
|
||||
|
||||
return create(name, armorItem)
|
||||
}
|
||||
|
||||
private fun campfirePotItem(block: Block, color: CampfirePotColor): CampfirePotItem {
|
||||
val item = create("campfire_pot_${color.suffix}", CampfirePotItem(block, color))
|
||||
campfire_pots.add(item)
|
||||
|
||||
@@ -45,6 +45,7 @@ import com.cobblemon.mod.common.client.net.pasture.UpdatePastureConflictFlagHand
|
||||
import com.cobblemon.mod.common.client.net.pokedex.ServerConfirmedRegisterHandler
|
||||
import com.cobblemon.mod.common.client.net.pokemon.update.ClientboundUpdateRidingStateHandler
|
||||
import com.cobblemon.mod.common.client.net.pokemon.update.PokemonUpdatePacketHandler
|
||||
import com.cobblemon.mod.common.client.net.riding.ClientboundGrabEntityHandler
|
||||
import com.cobblemon.mod.common.client.net.riding.ClientboundUpdateDriverInputHandler
|
||||
import com.cobblemon.mod.common.client.net.settings.OpenCobblemonConfigEditorHandler
|
||||
import com.cobblemon.mod.common.client.net.settings.ServerSettingsPacketHandler
|
||||
@@ -102,6 +103,7 @@ import com.cobblemon.mod.common.net.messages.client.pokemon.update.*
|
||||
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.AddEvolutionPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.ClearEvolutionsPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.pokemon.update.evolution.RemoveEvolutionPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.riding.ClientboundGrabEntityPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.settings.OpenCobblemonConfigScreenPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.settings.ServerSettingsPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.sound.UnvalidatedPlaySoundS2CPacket
|
||||
@@ -184,6 +186,7 @@ import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetMarkingsPa
|
||||
import com.cobblemon.mod.common.net.messages.server.pokemon.update.SetNicknamePacket
|
||||
import com.cobblemon.mod.common.net.messages.server.pokemon.update.evolution.AcceptEvolutionPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.riding.DismountPokemonPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.riding.GrabEntityPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.riding.ServerboundUpdateDriverInputPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.riding.ServerboundUpdateRiderRotationPacket
|
||||
import com.cobblemon.mod.common.net.messages.server.starter.RequestStarterScreenPacket
|
||||
@@ -239,6 +242,7 @@ import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetMarkingsHan
|
||||
import com.cobblemon.mod.common.net.serverhandling.pokemon.update.SetNicknameHandler
|
||||
import com.cobblemon.mod.common.net.serverhandling.riding.DismountPokemonPacketHandler
|
||||
import com.cobblemon.mod.common.net.serverhandling.riding.DriverInputPacketHandler
|
||||
import com.cobblemon.mod.common.net.serverhandling.riding.GrabEntityPacketHandler
|
||||
import com.cobblemon.mod.common.net.serverhandling.riding.ServerboundUpdateRiderRotationHandler
|
||||
import com.cobblemon.mod.common.net.serverhandling.starter.RequestStarterScreenHandler
|
||||
import com.cobblemon.mod.common.net.serverhandling.starter.SelectStarterPacketHandler
|
||||
@@ -490,6 +494,7 @@ object CobblemonNetwork {
|
||||
// Riding
|
||||
list.add(PacketRegisterInfo(ClientboundUpdateRidingStatePacket.ID, ClientboundUpdateRidingStatePacket::decode, ClientboundUpdateRidingStateHandler))
|
||||
list.add(PacketRegisterInfo(ClientboundUpdateDriverInputPacket.ID, ClientboundUpdateDriverInputPacket::decode, ClientboundUpdateDriverInputHandler))
|
||||
list.add(PacketRegisterInfo(ClientboundGrabEntityPacket.ID, ClientboundGrabEntityPacket::decode, ClientboundGrabEntityHandler))
|
||||
|
||||
// Debug
|
||||
list.add(PacketRegisterInfo(OpenRidingStatsDebugGUIPacket.ID, OpenRidingStatsDebugGUIPacket::decode, OpenRidingStatsDebugGUIHandler))
|
||||
@@ -600,6 +605,7 @@ object CobblemonNetwork {
|
||||
list.add(PacketRegisterInfo(ServerboundUpdateRidingStatRangePacket.ID, ServerboundUpdateRidingStatRangePacket::decode, ServerboundUpdateRidingStatRangeHandler))
|
||||
list.add(PacketRegisterInfo(ServerboundUpdateRidingSettingsPacket.ID, ServerboundUpdateRidingSettingsPacket::decode, ServerboundUpdateRidingSettingsHandler))
|
||||
list.add(PacketRegisterInfo(DismountPokemonPacket.ID, DismountPokemonPacket::decode, DismountPokemonPacketHandler))
|
||||
list.add(PacketRegisterInfo(GrabEntityPacket.ID, GrabEntityPacket::decode, GrabEntityPacketHandler))
|
||||
list.add(PacketRegisterInfo(ServerboundUpdateDriverInputPacket.ID, ServerboundUpdateDriverInputPacket::decode, DriverInputPacketHandler))
|
||||
list.add(PacketRegisterInfo(ServerboundUpdateRiderRotationPacket.ID, ServerboundUpdateRiderRotationPacket::decode, ServerboundUpdateRiderRotationHandler))
|
||||
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2023 Cobblemon Contributors
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
package com.cobblemon.mod.common.api.ai.config.task
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonMemories
|
||||
import com.cobblemon.mod.common.api.ai.BehaviourConfigurationContext
|
||||
import com.cobblemon.mod.common.api.ai.WrapperLivingEntityTask
|
||||
import com.cobblemon.mod.common.api.npc.configuration.MoLangConfigVariable
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.entity.pokemon.ai.tasks.DefendOwnerTask
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.ai.behavior.BehaviorControl
|
||||
import net.minecraft.world.entity.ai.memory.MemoryModuleType
|
||||
|
||||
class DefendOwnerTaskConfig : SingleTaskConfig {
|
||||
|
||||
override fun getVariables(
|
||||
entity: LivingEntity,
|
||||
behaviourConfigurationContext: BehaviourConfigurationContext
|
||||
): List<MoLangConfigVariable> {
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
override fun createTask(
|
||||
entity: LivingEntity,
|
||||
behaviourConfigurationContext: BehaviourConfigurationContext
|
||||
): BehaviorControl<in LivingEntity>? {
|
||||
behaviourConfigurationContext.addMemories(
|
||||
MemoryModuleType.ATTACK_TARGET,
|
||||
CobblemonMemories.NEAREST_VISIBLE_ATTACKER,
|
||||
)
|
||||
|
||||
return WrapperLivingEntityTask(
|
||||
DefendOwnerTask.create(),
|
||||
PokemonEntity::class.java
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -105,7 +105,6 @@ interface TaskConfig {
|
||||
cobblemonResource("go_to_land") to GoToLandTaskConfig::class.java,
|
||||
cobblemonResource("manage_flight_in_battle") to ManageFlightInBattleTaskConfig::class.java,
|
||||
cobblemonResource("attack_hostile_mobs") to AttackHostileMobsTaskConfig::class.java,
|
||||
cobblemonResource("defend_owner") to DefendOwnerTaskConfig::class.java,
|
||||
cobblemonResource("move_to_sweet_berry_bush") to MoveToSweetBerryBushTaskConfig::class.java,
|
||||
cobblemonResource("stop_moving_to_sweet_berry_bush") to StopTryingToReachSweetBerryBushTaskConfig::class.java,
|
||||
cobblemonResource("harvest_sweet_berry_bush") to HarvestSweetBerryBushTaskConfig::class.java,
|
||||
|
||||
@@ -322,7 +322,7 @@ class JetBehaviour : RidingBehaviour<JetSettings, JetState> {
|
||||
val pitchRot = handling * state.currMouseYForce.get()
|
||||
|
||||
// Roll
|
||||
val rollRot = handling * state.currMouseXForce.get()
|
||||
val rollRot = handling * 1.5 * state.currMouseXForce.get()
|
||||
|
||||
val mouseRotation = Vec3(0.0, pitchRot, rollRot)
|
||||
|
||||
|
||||
@@ -88,6 +88,7 @@ abstract class OneToOneFileStoreAdapter<S>(
|
||||
result
|
||||
}
|
||||
else {
|
||||
storeClass.getConstructor(UUID::class.java).newInstance(uuid)
|
||||
var result = storeClass.getConstructor(UUID::class.java).newInstance(uuid)
|
||||
save(storeClass, uuid, serialize(result, registryAccess))
|
||||
oldFile.delete()
|
||||
|
||||
@@ -10,7 +10,6 @@ package com.cobblemon.mod.common.block
|
||||
|
||||
import com.bedrockk.molang.runtime.value.DoubleValue
|
||||
import com.cobblemon.mod.common.entity.MoLangScriptingEntity
|
||||
import com.cobblemon.mod.common.util.isServerSide
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.core.Direction
|
||||
import net.minecraft.core.dispenser.DispenseItemBehavior
|
||||
@@ -264,36 +263,21 @@ class SaccharineLeafBlock(settings: Properties) : LeavesBlock(settings) {
|
||||
val isGlassBottle = itemStack.`is`(Items.GLASS_BOTTLE)
|
||||
val isHoneyBottle = itemStack.`is`(Items.HONEY_BOTTLE)
|
||||
|
||||
if (isGlassBottle && isAtMaxAge(state)) {
|
||||
if (level.isClientSide) return ItemInteractionResult.SUCCESS
|
||||
if (isGlassBottle && !isAtMinAge(state)) {
|
||||
// Decrement stack if not in creative mode
|
||||
itemStack.consume(1, player)
|
||||
|
||||
// Give player a honey bottle
|
||||
if (stack.isEmpty) {
|
||||
// Replace the consumed empty bottle with a honey bottle
|
||||
player.setItemInHand(hand, ItemStack(Items.HONEY_BOTTLE));
|
||||
} else {
|
||||
player.addItem(Items.HONEY_BOTTLE.defaultInstance)
|
||||
}
|
||||
// Give player honey bottle for now
|
||||
player.addItem(Items.HONEY_BOTTLE.defaultInstance)
|
||||
|
||||
level.playSound(null, pos, SoundEvents.BOTTLE_FILL, SoundSource.BLOCKS)
|
||||
level.setBlock(pos, state.setValue(AGE, 0), UPDATE_CLIENTS)
|
||||
level.gameEvent(null, GameEvent.BLOCK_CHANGE, pos)
|
||||
return ItemInteractionResult.SUCCESS
|
||||
} else if (isHoneyBottle && !isAtMaxAge(state)) {
|
||||
if (level.isClientSide) return ItemInteractionResult.SUCCESS
|
||||
|
||||
// Decrement stack if not in creative mode
|
||||
if (!player.isCreative) {
|
||||
itemStack.consume(1, player)
|
||||
if (stack.isEmpty) {
|
||||
// Replace the consumed honey bottle with an empty bottle
|
||||
player.setItemInHand(hand, ItemStack(Items.GLASS_BOTTLE));
|
||||
} else {
|
||||
player.addItem(Items.GLASS_BOTTLE.defaultInstance)
|
||||
}
|
||||
}
|
||||
itemStack.consume(1, player)
|
||||
player.addItem(Items.GLASS_BOTTLE.defaultInstance)
|
||||
|
||||
level.playSound(null, pos, SoundEvents.HONEY_BLOCK_PLACE, SoundSource.BLOCKS)
|
||||
level.setBlock(pos, state.setValue(AGE, 2), UPDATE_CLIENTS)
|
||||
|
||||
@@ -500,8 +500,11 @@ class PokemonClientDelegate : PosableState(), PokemonSideDelegate {
|
||||
}
|
||||
|
||||
fun getSeatLocator(passenger: Entity): String {
|
||||
if (this.getEntity().entityHook == passenger) {
|
||||
return "entity_hook"
|
||||
}
|
||||
val seatIndex = this.getEntity().occupiedSeats.indexOf(passenger)
|
||||
if (seatIndex == -1) throw IllegalArgumentException("Entity is not currently riding a seat")
|
||||
if (seatIndex == -1) return "entity_hook"
|
||||
return this.getEntity().rideProp.seats[seatIndex].locator ?: "seat_${seatIndex + 1}"
|
||||
}
|
||||
|
||||
|
||||
@@ -592,10 +592,6 @@ class PokemonInfoWidget(val pX: Int, val pY: Int, val updateForm: (PokedexForm)
|
||||
}
|
||||
|
||||
private fun switchForm(nextIndex: Boolean) {
|
||||
if (visibleForms.isEmpty() || currentEntry == null) {
|
||||
return
|
||||
}
|
||||
|
||||
selectedPoseIndex = 0
|
||||
|
||||
if (nextIndex) {
|
||||
@@ -606,8 +602,6 @@ class PokemonInfoWidget(val pX: Int, val pY: Int, val updateForm: (PokedexForm)
|
||||
else selectedFormIndex = visibleForms.lastIndex
|
||||
}
|
||||
|
||||
selectedFormIndex = selectedFormIndex.coerceIn(0, visibleForms.lastIndex)
|
||||
|
||||
setupButtons(currentEntry!!, visibleForms[selectedFormIndex])
|
||||
updateAspects()
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ object CobblemonKeyBinds {
|
||||
val PARTY_OVERLAY_UP = this.queue(UpShiftPartyBinding)
|
||||
val SEND_OUT_POKEMON = this.queue(PartySendBinding)
|
||||
val RIDING_FREELOOK = this.queue(RidingFreelookBinding)
|
||||
val GRAB_ENTITY = this.queue(GrabEntityBinding)
|
||||
|
||||
fun register(registrar: (KeyMapping) -> Unit) {
|
||||
this.keyBinds.forEach(registrar::invoke)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.cobblemon.mod.common.client.keybind.keybinds
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonNetwork
|
||||
import com.cobblemon.mod.common.client.keybind.CobblemonBlockingKeyBinding
|
||||
import com.cobblemon.mod.common.client.keybind.KeybindCategories
|
||||
import com.cobblemon.mod.common.net.messages.server.riding.GrabEntityPacket
|
||||
import com.mojang.blaze3d.platform.InputConstants
|
||||
|
||||
object GrabEntityBinding : CobblemonBlockingKeyBinding(
|
||||
"key.cobblemon.grabentity",
|
||||
InputConstants.Type.KEYSYM,
|
||||
InputConstants.KEY_V,
|
||||
KeybindCategories.COBBLEMON_CATEGORY
|
||||
) {
|
||||
override fun onPress() {
|
||||
CobblemonNetwork.sendToServer(GrabEntityPacket())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.cobblemon.mod.common.client.net.riding
|
||||
|
||||
import com.cobblemon.mod.common.api.net.ClientNetworkPacketHandler
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.net.messages.client.orientation.ClientboundUpdateDriverInputPacket
|
||||
import com.cobblemon.mod.common.net.messages.client.riding.ClientboundGrabEntityPacket
|
||||
import net.minecraft.client.Minecraft
|
||||
import net.minecraft.client.player.RemotePlayer
|
||||
|
||||
object ClientboundGrabEntityHandler : ClientNetworkPacketHandler<ClientboundGrabEntityPacket> {
|
||||
override fun handle(packet: ClientboundGrabEntityPacket, client: Minecraft) {
|
||||
client.executeIfPossible {
|
||||
val level = client.level ?: return@executeIfPossible
|
||||
val vehicle = level.getEntity(packet.vehicle) ?: return@executeIfPossible
|
||||
val entity = packet.entity?.let { level.getEntity(it) }
|
||||
val pokemon = vehicle as? PokemonEntity ?: return@executeIfPossible
|
||||
|
||||
if (entity == null) {
|
||||
pokemon.entityHook?.stopRiding()
|
||||
pokemon.entityHook = null
|
||||
}
|
||||
else {
|
||||
pokemon.entityHook?.stopRiding()
|
||||
entity.startRiding(pokemon, true)
|
||||
pokemon.entityHook = entity
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -418,6 +418,7 @@ open class PokemonEntity(
|
||||
var tickSpawned = 0
|
||||
|
||||
var occupiedSeats = arrayOfNulls<Entity>(seats.size)
|
||||
var entityHook: Entity? = null
|
||||
|
||||
init {
|
||||
delegate.initialize(this)
|
||||
@@ -542,16 +543,14 @@ open class PokemonEntity(
|
||||
if (level().isClientSide) {
|
||||
MountedCameraTypeHandler.handleDismount(passenger, this)
|
||||
}
|
||||
if (entityHook == passenger) {
|
||||
entityHook = null
|
||||
}
|
||||
super.removePassenger(passenger)
|
||||
if (passengers.isEmpty()) {
|
||||
ifRidingAvailable { _, _, state -> pokemon.rideStamina = state.stamina.get() }
|
||||
ridingController?.context?.state?.reset()
|
||||
ridingAnimationData.clear()
|
||||
|
||||
// reset riding orientation
|
||||
if (this is OrientationControllable) {
|
||||
this.orientationController.reset()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2173,10 +2172,15 @@ open class PokemonEntity(
|
||||
}
|
||||
|
||||
override fun canAddPassenger(passenger: Entity): Boolean {
|
||||
return passengers.size < seats.size
|
||||
return entityHook == passenger || passengers.size < seats.size
|
||||
}
|
||||
|
||||
public override fun addPassenger(passenger: Entity) {
|
||||
if (entityHook == passenger) {
|
||||
super.addPassenger(passenger)
|
||||
return
|
||||
}
|
||||
|
||||
if (passenger is ServerPlayer) {
|
||||
// Recall all the rest of the player's party pokes
|
||||
passenger.party()
|
||||
@@ -2267,6 +2271,10 @@ open class PokemonEntity(
|
||||
this.yBodyRot = this.yRot
|
||||
this.passengers.filterIsInstance<LivingEntity>()
|
||||
|
||||
if (behaviour.key != cobblemonResource("air/bird") && entityHook != null) {
|
||||
entityHook!!.stopRiding()
|
||||
}
|
||||
|
||||
if (behaviour.isActive(settings, state, this) && behaviour.canJump(settings, state, this, driver)) {
|
||||
if (this.jumpInputStrength > 0) {
|
||||
//this.jump(this.jumpStrength, movementInput)
|
||||
|
||||
@@ -10,11 +10,8 @@ package com.cobblemon.mod.common.entity.pokemon.ai.sensors
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonMemories
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.util.getMemorySafely
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.Mob
|
||||
import net.minecraft.world.entity.ai.memory.MemoryModuleType
|
||||
import net.minecraft.world.entity.ai.memory.NearestVisibleLivingEntities
|
||||
import net.minecraft.world.entity.ai.sensing.Sensor
|
||||
@@ -31,17 +28,8 @@ class DefendOwnerSensor : Sensor<PokemonEntity>(10) {
|
||||
}
|
||||
|
||||
private fun setNearestAttacker(entity: PokemonEntity, visibleMobs: NearestVisibleLivingEntities, owner: LivingEntity) {
|
||||
val nearestAttacker = visibleMobs.findClosest { livingEntity ->
|
||||
// Prevents Pokémons from attacking players as owned Pokémons are currently invulnerable
|
||||
if (livingEntity is ServerPlayer) return@findClosest false
|
||||
|
||||
if (livingEntity.lastHurtMob == owner) return@findClosest true
|
||||
if (livingEntity is Mob && livingEntity.target == owner) return@findClosest true
|
||||
|
||||
val mobAttackTarget = livingEntity.brain.getMemorySafely(MemoryModuleType.ATTACK_TARGET)
|
||||
if (mobAttackTarget.isPresent && mobAttackTarget.get() == owner) return@findClosest true
|
||||
|
||||
return@findClosest false
|
||||
val nearestAttacker = visibleMobs.findClosest { mob ->
|
||||
mob.lastHurtMob == owner
|
||||
}.map { mob -> mob as LivingEntity }
|
||||
|
||||
entity.brain.setMemory(CobblemonMemories.NEAREST_VISIBLE_ATTACKER, nearestAttacker)
|
||||
|
||||
@@ -10,10 +10,18 @@ package com.cobblemon.mod.common.entity.pokemon.ai.tasks
|
||||
|
||||
import com.cobblemon.mod.common.CobblemonMemories
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.google.common.collect.ImmutableMap
|
||||
import net.minecraft.server.level.ServerLevel
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
import net.minecraft.world.entity.ai.attributes.Attributes
|
||||
import net.minecraft.world.entity.ai.behavior.Behavior
|
||||
import net.minecraft.world.entity.ai.behavior.OneShot
|
||||
import net.minecraft.world.entity.ai.behavior.declarative.BehaviorBuilder
|
||||
import net.minecraft.world.entity.ai.behavior.declarative.Trigger
|
||||
import net.minecraft.world.entity.ai.memory.MemoryModuleType
|
||||
import net.minecraft.world.entity.ai.memory.MemoryStatus
|
||||
import net.minecraft.world.entity.ai.memory.WalkTarget
|
||||
import net.minecraft.world.entity.ai.targeting.TargetingConditions
|
||||
|
||||
object DefendOwnerTask {
|
||||
fun create(): OneShot<PokemonEntity> {
|
||||
|
||||
@@ -13,10 +13,7 @@ import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.world.entity.EquipmentSlot
|
||||
import net.minecraft.world.item.Equipable
|
||||
|
||||
class WearableItem(
|
||||
val name: String,
|
||||
val armorEquipmentSlot: EquipmentSlot = EquipmentSlot.HEAD,
|
||||
): CobblemonItem(Properties()), Equipable {
|
||||
class WearableItem(val name: String): CobblemonItem(Properties()), Equipable {
|
||||
companion object {
|
||||
const val MODEL_PATH = "item/wearable"
|
||||
}
|
||||
@@ -24,7 +21,5 @@ class WearableItem(
|
||||
fun getModel3d(): ResourceLocation = cobblemonResource("${MODEL_PATH}/${this.name}")
|
||||
fun getModel2d(): ResourceLocation = cobblemonResource(this.name)
|
||||
|
||||
override fun getEquipmentSlot(): EquipmentSlot {
|
||||
return armorEquipmentSlot
|
||||
}
|
||||
override fun getEquipmentSlot(): EquipmentSlot { return EquipmentSlot.HEAD }
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.cobblemon.mod.common.net.messages.client.riding
|
||||
|
||||
import com.cobblemon.mod.common.api.net.NetworkPacket
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
|
||||
class ClientboundGrabEntityPacket internal constructor(
|
||||
val vehicle: Int,
|
||||
val entity: Int?
|
||||
) : NetworkPacket<ClientboundGrabEntityPacket> {
|
||||
override val id = ID
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {
|
||||
buffer.writeVarInt(vehicle)
|
||||
buffer.writeNullable(entity) { _, v -> buffer.writeVarInt(v) }
|
||||
}
|
||||
|
||||
companion object {
|
||||
val ID = cobblemonResource("clientbound_grab_entity")
|
||||
fun decode(buffer: RegistryFriendlyByteBuf): ClientboundGrabEntityPacket {
|
||||
val vehicle = buffer.readVarInt()
|
||||
val entity = buffer.readNullable { buffer.readVarInt() }
|
||||
return ClientboundGrabEntityPacket(vehicle, entity)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package com.cobblemon.mod.common.net.messages.server.riding
|
||||
|
||||
import com.cobblemon.mod.common.api.net.NetworkPacket
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import net.minecraft.network.RegistryFriendlyByteBuf
|
||||
|
||||
class GrabEntityPacket : NetworkPacket<GrabEntityPacket> {
|
||||
override val id = ID
|
||||
|
||||
override fun encode(buffer: RegistryFriendlyByteBuf) {}
|
||||
|
||||
companion object {
|
||||
val ID = cobblemonResource("grab_entity")
|
||||
fun decode(buffer: RegistryFriendlyByteBuf) = GrabEntityPacket()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package com.cobblemon.mod.common.net.serverhandling.riding
|
||||
|
||||
import com.cobblemon.mod.common.api.net.ServerNetworkPacketHandler
|
||||
import com.cobblemon.mod.common.client.MountedCameraTypeHandler
|
||||
import com.cobblemon.mod.common.entity.pokemon.PokemonEntity
|
||||
import com.cobblemon.mod.common.net.messages.server.riding.GrabEntityPacket
|
||||
import com.cobblemon.mod.common.util.cobblemonResource
|
||||
import com.cobblemon.mod.common.util.party
|
||||
import net.minecraft.server.MinecraftServer
|
||||
import net.minecraft.server.level.ServerPlayer
|
||||
import net.minecraft.world.entity.LivingEntity
|
||||
|
||||
object GrabEntityPacketHandler : ServerNetworkPacketHandler<GrabEntityPacket> {
|
||||
|
||||
override fun handle(
|
||||
packet: GrabEntityPacket,
|
||||
server: MinecraftServer,
|
||||
player: ServerPlayer
|
||||
) {
|
||||
if (!(player.isPassenger && player.vehicle is PokemonEntity)) return
|
||||
|
||||
val pokemon = player.vehicle as PokemonEntity
|
||||
if (pokemon.controllingPassenger == player) {
|
||||
pokemon.ifRidingAvailable { behaviour, _, _ ->
|
||||
if (behaviour.key == cobblemonResource("air/bird") && pokemon.entityHook == null) {
|
||||
pokemon.level().getEntities(pokemon, pokemon.boundingBox.inflate(1.0, 1.0, 1.0)) { it is LivingEntity && it !is PokemonEntity && !pokemon.passengers.contains(it) }
|
||||
.minByOrNull { it.distanceToSqr(pokemon) }
|
||||
?.let { passenger ->
|
||||
if (passenger is ServerPlayer) {
|
||||
passenger.party()
|
||||
.mapNotNull { it.entity }
|
||||
.filter { it != this }
|
||||
.forEach { it.recallWithAnimation() }
|
||||
}
|
||||
else if (pokemon.level().isClientSide) {
|
||||
MountedCameraTypeHandler.handleMount(passenger, pokemon)
|
||||
}
|
||||
pokemon.entityHook = passenger
|
||||
passenger.startRiding(pokemon)
|
||||
}
|
||||
}
|
||||
else if (pokemon.entityHook != null) {
|
||||
pokemon.entityHook!!.stopRiding()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun canPlayerStopRidingPokemon(pokemon: PokemonEntity, player: ServerPlayer): Boolean {
|
||||
return pokemon.ifRidingAvailableSupply(false) { behaviour, settings, state ->
|
||||
behaviour.canStopRiding(settings, state, pokemon, player)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -673,7 +673,7 @@ open class Pokemon : ShowdownIdentifiable {
|
||||
* Whether this Pokémon's held item can be dropped by its AI.
|
||||
*/
|
||||
internal var canDropHeldItem: Boolean = false
|
||||
get() = field && !heldItem.isEmpty
|
||||
get() = field || heldItem.isEmpty
|
||||
|
||||
val riding: RidingProperties
|
||||
get() = this.form.riding
|
||||
|
||||
@@ -1296,7 +1296,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.1]},
|
||||
"3.4583": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1304,13 +1304,13 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"2.4167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.4167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"3.75": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.75": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1318,7 +1318,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"3.4583": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1326,7 +1326,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0.1, 0, 0.1]},
|
||||
"3.4583": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1334,13 +1334,13 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"2.4167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.4167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"3.75": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.75": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1348,7 +1348,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"3.4583": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1539,7 +1539,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.1]},
|
||||
"3.4583": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1547,13 +1547,13 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"2.4167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.4167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"3.75": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.75": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1561,7 +1561,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"3.4583": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1578,7 +1578,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [0.1, 0, 0.1]},
|
||||
"3.4583": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1586,13 +1586,13 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.1667": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"2.4167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.4167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"3.75": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.75": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -1600,7 +1600,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"2.4167": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"3.4583": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"3.4583": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"4.25": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2241,7 +2241,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.2, 0, 0.2]},
|
||||
"0.875": {"pre": [0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [-0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2249,7 +2249,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.2, 0, 0.2]},
|
||||
"0.875": {"pre": [-0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2257,7 +2257,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.2, 0, 0]},
|
||||
"0.4583": {"pre": [0.2, 0, 0], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [-0.2, 0, 0], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
@@ -2267,7 +2267,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.2]},
|
||||
"1.0833": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2275,7 +2275,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.2]},
|
||||
"1.0833": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2283,7 +2283,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2291,9 +2291,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.4583": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0.1, 0, -0.2]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2302,7 +2302,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.2, 0, 0]},
|
||||
"0.4583": {"pre": [-0.2, 0, 0], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0.2, 0, 0], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
@@ -2313,9 +2313,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.1, 0, 0.2]},
|
||||
"0.4583": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0.1, 0, 0.2]},
|
||||
"0.875": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.2083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2324,7 +2324,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.1, 0, 0.2]},
|
||||
"1.0833": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2332,7 +2332,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2340,9 +2340,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.4583": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.2]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2630,7 +2630,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.2, 0, 0.2]},
|
||||
"0.875": {"pre": [0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [-0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2638,7 +2638,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.2, 0, 0.2]},
|
||||
"0.875": {"pre": [-0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0.2, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2646,7 +2646,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.1]},
|
||||
"0.6667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2654,9 +2654,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.2]},
|
||||
"0.4583": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [-0.1, 0, 0.2]},
|
||||
"0.875": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.2083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2665,7 +2665,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2673,9 +2673,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.1, 0, -0.2]},
|
||||
"0.4583": {"pre": [-0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0.1, 0, -0.2]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2684,7 +2684,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [0.1, 0, 0.1]},
|
||||
"0.6667": {"pre": [-0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0.1, 0, 0.1], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2692,9 +2692,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [0.1, 0, 0.2]},
|
||||
"0.4583": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [0.1, 0, 0.2]},
|
||||
"0.875": {"pre": [-0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"0.875": {"pre": [0.1, 0, 0.2], "post": [0, 0, 0]},
|
||||
"1.2083": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2703,7 +2703,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.4583": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -2711,9 +2711,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0417": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.2]},
|
||||
"0.4583": {"pre": [0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"0.4583": {"pre": [-0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"0.6667": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.2]},
|
||||
"1.0833": {"pre": [0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.0833": {"pre": [-0.1, 0, -0.2], "post": [0, 0, 0]},
|
||||
"1.3333": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"1.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -2997,9 +2997,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.9167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -3007,7 +3007,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -3016,9 +3016,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.9167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -3026,7 +3026,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -9026,6 +9026,12 @@
|
||||
},
|
||||
"finger_ground_outer_right2": {
|
||||
"rotation": [40, 0, 0]
|
||||
},
|
||||
"entity_hook": {
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"1.1667": [0, 4, 8]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -11861,6 +11867,12 @@
|
||||
"0.0": [0, 0, 0],
|
||||
"2.2917": [0, 0, 0]
|
||||
}
|
||||
},
|
||||
"entity_hook": {
|
||||
"position": {
|
||||
"0.0": [0, -2, 2],
|
||||
"1.1667": [0, -1, 4]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12286,6 +12298,13 @@
|
||||
},
|
||||
"membrane_air_right4": {
|
||||
"rotation": ["0-math.cos(q.anim_time*90*25)*0.75", 0, 0]
|
||||
},
|
||||
"entity_hook": {
|
||||
"position": {
|
||||
"0.0": [2, 0, 2],
|
||||
"1.1667": [2, -2.14, 3],
|
||||
"2.0417": [2, -2, 2]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -12477,9 +12496,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.9167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -12487,7 +12506,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [0.1, 0, -0.1]},
|
||||
"1.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -12496,9 +12515,9 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.0833": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"0.2917": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"0.2917": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.9167": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
@@ -12506,7 +12525,7 @@
|
||||
"position": {
|
||||
"0.0": [0, 0, 0],
|
||||
"0.7083": {"pre": [0, 0, 0], "post": [-0.1, 0, -0.1]},
|
||||
"1.6667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.6667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]},
|
||||
"1.9167": {"pre": [0, 0, 0], "post": [0, 0, 0]},
|
||||
"2.75": {"pre": [0, 0, 0], "post": [0, 0, 0]}
|
||||
}
|
||||
@@ -13030,13 +13049,13 @@
|
||||
"eyelid_left": {
|
||||
"position": {
|
||||
"0.0": [0.1, 0, -0.1],
|
||||
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
},
|
||||
"eyelid_right": {
|
||||
"position": {
|
||||
"0.0": [-0.1, 0, -0.1],
|
||||
"0.1667": {"pre": [0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
"0.1667": {"pre": [-0.1, 0, -0.1], "post": [0, 0, 0]}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -299,14 +299,6 @@
|
||||
"rotation": [0, 0, 15]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.eelektrik.cry": {
|
||||
"animation_length": 1.25,
|
||||
"sound_effects": {
|
||||
"0.0417": {
|
||||
"effect": "pokemon.eelektrik.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -869,14 +869,6 @@
|
||||
"position": [-0.1, 0, 0]
|
||||
}
|
||||
}
|
||||
},
|
||||
"animation.eelektross.cry": {
|
||||
"animation_length": 1.25,
|
||||
"sound_effects": {
|
||||
"0.0417": {
|
||||
"effect": "pokemon.eelektross.cry"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@
|
||||
"identifier": "geometry.aerodactyl",
|
||||
"texture_width": 256,
|
||||
"texture_height": 256,
|
||||
"visible_bounds_width": 12,
|
||||
"visible_bounds_width": 13,
|
||||
"visible_bounds_height": 3.5,
|
||||
"visible_bounds_offset": [0, 1.25, 0]
|
||||
},
|
||||
@@ -1161,6 +1161,17 @@
|
||||
{"origin": [6.5, -3.6, 5.25], "size": [1, 1, 1], "inflate": 0.25, "uv": [112, 82]}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "entity_hook",
|
||||
"parent": "left_upper_leg",
|
||||
"pivot": [7, 14.65, 0],
|
||||
"locators": {
|
||||
"entity_hook": {
|
||||
"offset": [3, -1, 8],
|
||||
"rotation": [0, 45, -90]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "right_upper_leg",
|
||||
"parent": "body",
|
||||
|
||||
@@ -486,7 +486,7 @@
|
||||
"parent": "eye_left",
|
||||
"pivot": [4.2, 34.1, -10.53],
|
||||
"cubes": [
|
||||
{"origin": [4.98, 34.01, -10.53], "size": [3, 1, 1], "inflate": 0.01, "uv": [132, 116]}
|
||||
{"origin": [4.98, 34, -10.53], "size": [3, 1, 1], "inflate": 0.01, "uv": [132, 116]}
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -782,7 +782,7 @@
|
||||
"parent": "eye_right",
|
||||
"pivot": [-4.2, 34.1, -10.53],
|
||||
"cubes": [
|
||||
{"origin": [-7.98, 34.01, -10.53], "size": [3, 1, 1], "inflate": 0.01, "uv": [140, 116]}
|
||||
{"origin": [-7.98, 34, -10.53], "size": [3, 1, 1], "inflate": 0.01, "uv": [140, 116]}
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
"seat_1": [0, 0.45, 0]
|
||||
},
|
||||
"thirdPersonCameraOffset": {
|
||||
"seat_1": [0, 0.35, 0],
|
||||
"seat_1": [0, 0.35, 5],
|
||||
"seat_1_reverse": [0, 0.35, 0]
|
||||
},
|
||||
"thirdPersonCameraOffsetNoViewBobbing": {
|
||||
|
||||
@@ -3847,9 +3847,6 @@
|
||||
"cobblemon.behaviour.attack_hostile_mobs.name": "Attacks Hostile Mobs",
|
||||
"cobblemon.behaviour.attack_hostile_mobs.desc": "Attacks hostile mobs that are nearby, even if unprovoked.",
|
||||
|
||||
"cobblemon.behaviour.defend_owner.name": "Defend Owner",
|
||||
"cobblemon.behaviour.defend_owner.desc": "Defends its owner when they are attacked.",
|
||||
|
||||
"cobblemon.behaviour.pokemon_bee.name": "Pollinates Flowers",
|
||||
"cobblemon.behaviour.pokemon_bee.desc": "Pollinates flowers and adds honey to hives and Saccharine tree leaves.",
|
||||
|
||||
|
||||
@@ -1,235 +0,0 @@
|
||||
{
|
||||
"format_version": "1.21.6",
|
||||
"credit": "Made with Blockbench",
|
||||
"texture_size": [64, 24],
|
||||
"textures": {
|
||||
"0": "cobblemon:item/wearable/shell_helmet",
|
||||
"particle": "cobblemon:item/wearable/shell_helmet"
|
||||
},
|
||||
"elements": [
|
||||
{
|
||||
"from": [4, 1, 7],
|
||||
"to": [12, 4, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 12]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 0, 6, 2], "texture": "#0"},
|
||||
"east": {"uv": [4, 2, 4.75, 4], "texture": "#0"},
|
||||
"south": {"uv": [1.75, 12.66667, 3.75, 14.66667], "texture": "#0"},
|
||||
"west": {"uv": [4.75, 2, 5.5, 4], "texture": "#0"},
|
||||
"up": {"uv": [4, 2, 2, 0], "texture": "#0"},
|
||||
"down": {"uv": [4, 2, 2, 4.66667], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11, 0, 7],
|
||||
"to": [12, 1, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, -3, 9]},
|
||||
"faces": {
|
||||
"north": {"uv": [5.5, 3.33333, 5.75, 4], "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 0, 0.66667], "texture": "#0"},
|
||||
"south": {"uv": [5.75, 3.33333, 6, 4], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 0, 0.66667], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 0, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0.25, 0, 0, 0], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 0, 7],
|
||||
"to": [5, 1, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [0, -3, 9]},
|
||||
"faces": {
|
||||
"north": {"uv": [4, 4, 4.25, 4.66667], "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 0, 0.66667], "texture": "#0"},
|
||||
"south": {"uv": [3.75, 12.66667, 4, 13.33333], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 0, 0.66667], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 0, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0.25, 0, 0, 0], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [12, -1, 7],
|
||||
"to": [12, 1, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 11]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"east": {"uv": [4.25, 6.66667, 4.75, 8], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"west": {"uv": [5.5, 2, 6, 3.33333], "texture": "#0"},
|
||||
"up": {"uv": [0, 3.33333, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 3.33333], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, -1, 7],
|
||||
"to": [4, 1, 9],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 11]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"east": {"uv": [4, 10, 4.5, 11.33333], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"west": {"uv": [4.75, 6.66667, 5.25, 8], "texture": "#0"},
|
||||
"up": {"uv": [0, 3.33333, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 3.33333], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 2, 4],
|
||||
"to": [11, 4, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 12]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 4, 5.75, 5.33333], "texture": "#0"},
|
||||
"east": {"uv": [6, 2.66667, 6.75, 4], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 5.33333, 5.75, 6.66667], "texture": "#0"},
|
||||
"west": {"uv": [5.75, 4, 6.5, 5.33333], "texture": "#0"},
|
||||
"up": {"uv": [5.5, 13.33333, 4, 11.33333], "texture": "#0"},
|
||||
"down": {"uv": [5.25, 13.33333, 3.75, 15.33333], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 2, 7],
|
||||
"to": [11, 2, 10],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 12]},
|
||||
"faces": {
|
||||
"north": {"uv": [4.25, 4, 5.75, 5.33333], "texture": "#0"},
|
||||
"east": {"uv": [6, 2.66667, 6.75, 4], "texture": "#0"},
|
||||
"south": {"uv": [4.25, 5.33333, 5.75, 6.66667], "texture": "#0"},
|
||||
"west": {"uv": [5.75, 4, 6.5, 5.33333], "texture": "#0"},
|
||||
"up": {"uv": [5.5, 13.33333, 4, 11.33333], "texture": "#0"},
|
||||
"down": {"uv": [3.75, 15.33333, 5.25, 13.33333], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11, 0, 4],
|
||||
"to": [11, 2, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 12]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"east": {"uv": [5.75, 5.33333, 6.5, 6.66667], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"west": {"uv": [6, 1.33333, 6.75, 2.66667], "texture": "#0"},
|
||||
"up": {"uv": [0, 2, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 2], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [5, 0, 4],
|
||||
"to": [5, 2, 7],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 2, 12]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"east": {"uv": [6, 0, 6.75, 1.33333], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 1.33333], "texture": "#0"},
|
||||
"west": {"uv": [5.25, 6.66667, 6, 8], "texture": "#0"},
|
||||
"up": {"uv": [0, 2, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 2], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 1, 10],
|
||||
"to": [12, 4, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, 0, 12]},
|
||||
"faces": {
|
||||
"north": {"uv": [0, 10.66667, 1.75, 14], "texture": "#0"},
|
||||
"east": {"uv": [3.25, 8, 4.5, 10], "texture": "#0"},
|
||||
"south": {"uv": [1.75, 10.66667, 4, 12.66667], "texture": "#0"},
|
||||
"west": {"uv": [2, 8, 3.25, 10], "texture": "#0"},
|
||||
"up": {"uv": [6.5, 11.33333, 4.5, 8], "texture": "#0"},
|
||||
"down": {"uv": [4.25, 4.66667, 2, 8], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, -4, 9],
|
||||
"to": [12, 1, 15],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [4, -3, 13]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.75, 3.33333, 12.75, 6.66667], "texture": "#0"},
|
||||
"east": {"uv": [12.75, 0, 14.25, 3.33333], "texture": "#0"},
|
||||
"south": {"uv": [10.75, 0, 12.75, 3.33333], "texture": "#0"},
|
||||
"west": {"uv": [14.25, 0, 15.75, 3.33333], "texture": "#0"},
|
||||
"up": {"uv": [8.75, 4, 10.75, 8], "texture": "#0"},
|
||||
"down": {"uv": [8.75, 0, 10.75, 4], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [6, -1.3, 10.5],
|
||||
"to": [10, 6.7, 18.5],
|
||||
"rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1.65, 13.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.75, 3.33333, 13.75, 8.66667], "texture": "#0"},
|
||||
"east": {"uv": [2, 0, 0, 5.33333], "texture": "#0"},
|
||||
"south": {"uv": [13.75, 3.33333, 14.75, 8.66667], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 2, 5.33333], "texture": "#0"},
|
||||
"up": {"uv": [12.75, 8.66667, 13.75, 14], "texture": "#0"},
|
||||
"down": {"uv": [13.75, 8.66667, 14.75, 14], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, -1.4, 7.4],
|
||||
"to": [12, -1.4, 18.4],
|
||||
"rotation": {"angle": 45, "axis": "x", "origin": [7.5, 1.65, 13.5]},
|
||||
"faces": {
|
||||
"north": {"uv": [12.75, 3.33333, 13.75, 8.66667], "texture": "#0"},
|
||||
"east": {"uv": [0, 5.33333, 2, 10.66667], "texture": "#0"},
|
||||
"south": {"uv": [13.75, 3.33333, 14.75, 8.66667], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 2, 5.33333], "texture": "#0"},
|
||||
"up": {"uv": [12.75, 8.66667, 13.75, 14], "texture": "#0"},
|
||||
"down": {"uv": [6.75, 0, 8.75, 6.66667], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4.01, -4, 7],
|
||||
"to": [4.01, 4, 15],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 5.33333], "texture": "#0"},
|
||||
"east": {"uv": [8.75, 8, 10.75, 13.33333], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 5.33333], "texture": "#0"},
|
||||
"west": {"uv": [6.5, 6.66667, 8.5, 12], "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 0, 5.33333], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 5.33333], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [11.99, -4, 7],
|
||||
"to": [11.99, 4, 15],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 0, 5.33333], "texture": "#0"},
|
||||
"east": {"uv": [6.5, 6.66667, 8.5, 12], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 0, 5.33333], "texture": "#0"},
|
||||
"west": {"uv": [10.75, 9.33333, 12.75, 14.66667], "texture": "#0"},
|
||||
"up": {"uv": [0, 0, 0, 5.33333], "texture": "#0"},
|
||||
"down": {"uv": [0, 0, 0, 5.33333], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, 0, 7.01],
|
||||
"to": [12, 4, 7.01],
|
||||
"rotation": {"angle": 0, "axis": "y", "origin": [7, -3, 9]},
|
||||
"faces": {
|
||||
"north": {"uv": [10.75, 3.33333, 12.75, 6.66667], "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 0, 0.66667], "texture": "#0"},
|
||||
"south": {"uv": [10.75, 6.66667, 12.75, 9.33333], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 0, 0.66667], "texture": "#0"},
|
||||
"up": {"uv": [0.25, 0, 0, 0], "texture": "#0"},
|
||||
"down": {"uv": [0.25, 0, 0, 0], "texture": "#0"}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [4, -3.99, 12],
|
||||
"to": [12, -3.99, 15],
|
||||
"faces": {
|
||||
"north": {"uv": [0, 0, 2, 0], "texture": "#0"},
|
||||
"east": {"uv": [0, 0, 0.75, 0], "texture": "#0"},
|
||||
"south": {"uv": [0, 0, 2, 0], "texture": "#0"},
|
||||
"west": {"uv": [0, 0, 0.75, 0], "texture": "#0"},
|
||||
"up": {"uv": [10.75, 8.66667, 12.75, 6.66667], "texture": "#0"},
|
||||
"down": {"uv": [10.75, 4.66667, 12.75, 6.66667], "texture": "#0"}
|
||||
}
|
||||
}
|
||||
],
|
||||
"display": {
|
||||
"head": {
|
||||
"translation": [0, 15.25, -6],
|
||||
"scale": [1.9, 1.9, 1.9]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 863 B |
|
Before Width: | Height: | Size: 582 B |
|
Before Width: | Height: | Size: 245 B |
|
Before Width: | Height: | Size: 415 B |
|
Before Width: | Height: | Size: 847 B |
|
Before Width: | Height: | Size: 268 B |
|
Before Width: | Height: | Size: 308 B |
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"name": "cobblemon.behaviour.defend_owner.name",
|
||||
"description": "cobblemon.behaviour.defend_owner.desc",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "add_tasks_to_activity",
|
||||
"activity": "core",
|
||||
"tasksByPriority": {
|
||||
"0": [
|
||||
"defend_owner"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "add_tasks_to_activity",
|
||||
"activity": "idle",
|
||||
"tasksByPriority": {
|
||||
"1": [
|
||||
"switch_to_fight"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "add_tasks_to_activity",
|
||||
"activity": "fight",
|
||||
"tasksByPriority": {
|
||||
"3": [
|
||||
"switch_from_fight"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -17,26 +17,10 @@
|
||||
},
|
||||
{
|
||||
"type": "apply_behaviours",
|
||||
"condition": "!q.entity.is_wild && (q.entity.is_pastured && q.entity.pasture_conflict_enabled == 1)",
|
||||
"condition": "!q.entity.is_wild && (q.entity.is_pastured && q.entity.pasture_conflict_enabled == 1) || (q.entity.is_in_party && q.entity.behaviour.combat.will_defend_owner)",
|
||||
"behaviours": [
|
||||
"cobblemon:attack_hostile_mobs"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "apply_behaviours",
|
||||
"condition": "!q.entity.is_wild && q.entity.is_in_party && q.entity.behaviour.combat.will_defend_owner",
|
||||
"behaviours": [
|
||||
"cobblemon:defend_owner"
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "add_memories_and_sensors",
|
||||
"condition": "!q.entity.is_wild && q.entity.is_in_party && q.entity.behaviour.combat.will_defend_owner",
|
||||
"memories": [
|
||||
"cobblemon:nearest_visible_attacker"
|
||||
],
|
||||
"sensors": [
|
||||
"cobblemon:pokemon_owner_under_attack"
|
||||
"cobblemon:attack_hostile_mobs",
|
||||
"cobblemon:fights_melee"
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"requirements": [
|
||||
{
|
||||
"variant": "owner_held_item",
|
||||
"itemCondition": "#c:tools/shear"
|
||||
"itemCondition": "#c:tools/shears"
|
||||
}
|
||||
],
|
||||
"effects": [
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"deccelRate": "0.005",
|
||||
"minSpeedFactor": "0.50",
|
||||
"handlingYawExpr": "q.get_ride_stats('SKILL', 'AIR', 50.0, 25.0)",
|
||||
"handlingExpr": "q.get_ride_stats('SKILL', 'AIR', 120.0, 15.0)",
|
||||
"handlingExpr": "q.get_ride_stats('SKILL', 'AIR', 80.0, 10.0)",
|
||||
"speedExpr": "q.get_ride_stats('SPEED', 'AIR', 24.0, 4.0)",
|
||||
"accelerationExpr": "q.get_ride_stats('ACCELERATION', 'AIR', 2.0, 8.0)",
|
||||
"jumpExpr": "q.get_ride_stats('JUMP', 'AIR', 2.0, 1.0)",
|
||||
|
||||
@@ -21,11 +21,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,11 +41,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -88,11 +78,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -21,11 +21,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -46,11 +41,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -88,11 +78,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -24,11 +24,6 @@
|
||||
"neededNearbyBlocks": [
|
||||
"minecraft:water"
|
||||
]
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -86,11 +81,6 @@
|
||||
"#cobblemon:is_overworld"
|
||||
],
|
||||
"maxY": 32
|
||||
},
|
||||
"anticondition": {
|
||||
"biomes": [
|
||||
"#cobblemon:is_deep_dark"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -250,10 +250,6 @@ object CobblemonFabric : CobblemonImplementation {
|
||||
EntityDataSerializers.registerSerializer(RideBoostsDataSerializer)
|
||||
}
|
||||
|
||||
override fun registerArmorMaterials() {
|
||||
CobblemonArmorMaterials.register { identifier, armorMaterial -> Registry.register(CobblemonArmorMaterials.registry, identifier, armorMaterial) }
|
||||
}
|
||||
|
||||
override fun registerItems() {
|
||||
CobblemonItems.register { identifier, item -> Registry.register(CobblemonItems.registry, identifier, item) }
|
||||
CobblemonItemGroups.register { provider ->
|
||||
|
||||
@@ -13,7 +13,7 @@ parchment_version = 2024.07.28@zip
|
||||
java_version = 21
|
||||
|
||||
mod_id=cobblemon
|
||||
mod_version=1.7.2
|
||||
mod_version=1.7.1
|
||||
snapshot=true
|
||||
|
||||
fabric.loom.multiProjectOptimisation=false
|
||||
@@ -9,10 +9,21 @@
|
||||
package com.cobblemon.mod.neoforge
|
||||
|
||||
import com.cobblemon.mod.common.*
|
||||
import com.cobblemon.mod.common.CobblemonRecipeCategories.*
|
||||
import com.cobblemon.mod.common.CobblemonRecipeCategories.COOKING_POT_COMPLEX_DISHES
|
||||
import com.cobblemon.mod.common.CobblemonRecipeCategories.COOKING_POT_FOODS
|
||||
import com.cobblemon.mod.common.CobblemonRecipeCategories.COOKING_POT_MEDICINES
|
||||
import com.cobblemon.mod.common.CobblemonRecipeCategories.COOKING_POT_MISC
|
||||
import com.cobblemon.mod.common.CobblemonRecipeCategories.COOKING_POT_SEARCH
|
||||
import com.cobblemon.mod.common.advancement.CobblemonCriteria
|
||||
import com.cobblemon.mod.common.advancement.predicate.CobblemonEntitySubPredicates
|
||||
import com.cobblemon.mod.common.api.net.serializers.*
|
||||
import com.cobblemon.mod.common.api.net.serializers.IdentifierDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.NPCPlayerTextureSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.PlatformTypeDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.PoseTypeDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.RideBoostsDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.StringSetDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.UUIDSetDataSerializer
|
||||
import com.cobblemon.mod.common.api.net.serializers.Vec3DataSerializer
|
||||
import com.cobblemon.mod.common.item.group.CobblemonItemGroups
|
||||
import com.cobblemon.mod.common.loot.LootInjector
|
||||
import com.cobblemon.mod.common.particle.CobblemonParticles
|
||||
@@ -31,9 +42,13 @@ import com.cobblemon.mod.neoforge.net.CobblemonNeoForgeNetworkManager
|
||||
import com.cobblemon.mod.neoforge.permission.ForgePermissionValidator
|
||||
import com.cobblemon.mod.neoforge.worldgen.CobblemonBiomeModifiers
|
||||
import com.mojang.brigadier.arguments.ArgumentType
|
||||
import java.util.Optional
|
||||
import java.util.UUID
|
||||
import net.minecraft.commands.synchronization.ArgumentTypeInfo
|
||||
import net.minecraft.commands.synchronization.ArgumentTypeInfos
|
||||
import net.minecraft.core.registries.BuiltInRegistries
|
||||
import net.minecraft.core.registries.Registries
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.resources.ResourceKey
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.MinecraftServer
|
||||
@@ -68,7 +83,12 @@ import net.neoforged.neoforge.client.event.RegisterRecipeBookCategoriesEvent
|
||||
import net.neoforged.neoforge.common.ItemAbilities
|
||||
import net.neoforged.neoforge.common.NeoForge
|
||||
import net.neoforged.neoforge.common.NeoForgeMod
|
||||
import net.neoforged.neoforge.event.*
|
||||
import net.neoforged.neoforge.event.AddPackFindersEvent
|
||||
import net.neoforged.neoforge.event.AddReloadListenerEvent
|
||||
import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent
|
||||
import net.neoforged.neoforge.event.LootTableLoadEvent
|
||||
import net.neoforged.neoforge.event.OnDatapackSyncEvent
|
||||
import net.neoforged.neoforge.event.RegisterCommandsEvent
|
||||
import net.neoforged.neoforge.event.entity.EntityAttributeCreationEvent
|
||||
import net.neoforged.neoforge.event.entity.player.PlayerEvent
|
||||
import net.neoforged.neoforge.event.entity.player.PlayerWakeUpEvent
|
||||
@@ -81,7 +101,6 @@ import net.neoforged.neoforge.registries.NeoForgeRegistries
|
||||
import net.neoforged.neoforge.registries.RegisterEvent
|
||||
import net.neoforged.neoforge.server.ServerLifecycleHooks
|
||||
import thedarkcolour.kotlinforforge.neoforge.forge.MOD_BUS
|
||||
import java.util.*
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@Mod(Cobblemon.MODID)
|
||||
@@ -312,16 +331,6 @@ class CobblemonNeoForge : CobblemonImplementation {
|
||||
}
|
||||
}
|
||||
|
||||
override fun registerArmorMaterials() {
|
||||
with(MOD_BUS) {
|
||||
addListener<RegisterEvent> { event ->
|
||||
event.register(CobblemonArmorMaterials.resourceKey) { helper ->
|
||||
CobblemonArmorMaterials.register { identifier, armorMaterial -> helper.register(identifier, armorMaterial) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun registerItems() {
|
||||
with(MOD_BUS) {
|
||||
addListener<RegisterEvent> { event ->
|
||||
|
||||