ru:tutorial:shield
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
ru:tutorial:shield [2022/03/23 18:58] – [Adding banner support to your shield (1.15)] furnygo | ru:tutorial:shield [2022/03/26 20:13] – [Adding banner support to your shield (1.14)] furnygo | ||
---|---|---|---|
Line 78: | Line 78: | ||
- | ===== Adding banner support to your shield (1.17+) ===== | + | ===== Добавление |
- | Будет добавлено (Лаги в редакторе) | + | |
- | ===== Adding banner support to your shield | + | Если вы используете 1.17, измените fabric_shield_lib в **gradle.properties** на: |
- | Будет добавлено | + | \\ |
+ | <code java> | ||
+ | fabric_shield_lib_version=1.4.5-1.17 | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | Вот тут-то и вступают в дело миксины. | ||
+ | |||
+ | Следующее, | ||
+ | |||
+ | <code java> | ||
+ | public static final Item NETHERITE_SHIELD | ||
+ | </ | ||
+ | |||
+ | Теперь нам нужно зарегистрировать несколько вещей в нашем '' | ||
+ | |||
+ | Чтобы создать наш '' | ||
+ | |||
+ | <code java> | ||
+ | public class ExampleModClient implements ClientModInitializer { | ||
+ | @Override | ||
+ | public void onInitializeClient() { | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Прежде чем мы выполним какую-либо работу в нашем инициализаторе модов клиента, | ||
+ | |||
+ | <code javascript> | ||
+ | { | ||
+ | [...] | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | } | ||
+ | [...] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Итак, теперь, | ||
+ | |||
+ | Во-первых, | ||
+ | <code java> | ||
+ | public class ExampleModClient implements ClientModInitializer { | ||
+ | |||
+ | public static final EntityModelLayer NETHERITE_SHIELD_MODEL_LAYER | ||
+ | |||
+ | @Override | ||
+ | public void onInitializeClient() { | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Далее мы зарегистрируем '' | ||
+ | |||
+ | <code java> | ||
+ | public class ExampleModClient implements ClientModInitializer { | ||
+ | |||
+ | public static final EntityModelLayer NETHERITE_SHIELD_MODEL_LAYER | ||
+ | |||
+ | @Override | ||
+ | public void onInitializeClient() { | ||
+ | EntityModelLayerRegistry.registerModelLayer(NETHERITE_SHIELD_MODEL_LAYER, | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Затем мы должны зарегистрировать 2 наших '' | ||
+ | |||
+ | <code java> | ||
+ | public class ExampleModClient implements ClientModInitializer { | ||
+ | |||
+ | public static final EntityModelLayer NETHERITE_SHIELD_MODEL_LAYER | ||
+ | |||
+ | @Override | ||
+ | public void onInitializeClient() { | ||
+ | EntityModelLayerRegistry.registerModelLayer(NETHERITE_SHIELD_MODEL_LAYER, | ||
+ | ClientSpriteRegistryCallback.event(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE).register((atlasTexture, | ||
+ | registry.register(new Identifier(" | ||
+ | registry.register(new Identifier(" | ||
+ | }); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | А теперь мы переходим к миксину. Не волнуйтесь, | ||
+ | |||
+ | Если это ваш первый раз, [[tutorial: | ||
+ | |||
+ | Мы создадим класс под названием '' | ||
+ | <code java> | ||
+ | @Mixin (BuiltinModelItemRenderer.class) | ||
+ | public class RendererMixin { | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | Затем мы создадим необходимые '' | ||
+ | <code java> | ||
+ | @Mixin (BuiltinModelItemRenderer.class) | ||
+ | public class RendererMixin { | ||
+ | private ShieldEntityModel modelNetheriteShield | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE_NO_PATTERN | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Далее нам нужно добавить @Shadow для '' | ||
+ | <code java> | ||
+ | @Mixin (BuiltinModelItemRenderer.class) | ||
+ | public class RendererMixin { | ||
+ | private ShieldEntityModel modelNetheriteShield; | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE_NO_PATTERN | ||
+ | |||
+ | @Final | ||
+ | @Shadow | ||
+ | private EntityModelLoader entityModelLoader; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Теперь мы внедрим метод '' | ||
+ | <code java> | ||
+ | @Mixin (BuiltinModelItemRenderer.class) | ||
+ | public class RendererMixin { | ||
+ | | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE_NO_PATTERN = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, | ||
+ | |||
+ | @Final | ||
+ | @Shadow | ||
+ | private EntityModelLoader entityModelLoader; | ||
+ | |||
+ | |||
+ | @Inject(method = " | ||
+ | private void setModelNetheriteShield(CallbackInfo ci){ | ||
+ | modelNetheriteShield = new ShieldEntityModel(this.entityModelLoader.getModelPart(ExampleModClient.NETHERITE_SHIELD_MODEL_LAYER)); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Теперь мы переходим к самой важной части миксина. Мы внедрим метод для отображения баннера на нашем щите. | ||
+ | |||
+ | <code java> | ||
+ | @Mixin (BuiltinModelItemRenderer.class) | ||
+ | public class RendererMixin { | ||
+ | | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, | ||
+ | private static final SpriteIdentifier NETHERITE_SHIELD_BASE_NO_PATTERN = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, | ||
+ | |||
+ | @Final | ||
+ | @Shadow | ||
+ | private EntityModelLoader entityModelLoader; | ||
+ | |||
+ | |||
+ | @Inject(method = " | ||
+ | private void setModelNetheriteShield(CallbackInfo ci){ | ||
+ | this.modelNetheriteShield = new ShieldEntityModel(this.entityModelLoader.getModelPart(ExampleModClient.NETHERITE_SHIELD_MODEL_LAYER)); | ||
+ | } | ||
+ | |||
+ | @Inject(method = " | ||
+ | private void mainRender(ItemStack stack, ModelTransformation.Mode mode, MatrixStack matrices, VertexConsumerProvider vertexConsumers, | ||
+ | if (stack.isOf(ExampleMod.NETHERITE_SHIELD)) { | ||
+ | FabricShieldLibClient.renderBanner(stack, | ||
+ | //The first five parameters are taken from the method, while the last 3 you provide yourself. You will provide the model, and then your 2 sprite identifiers in the order of ''// | ||
+ | '' | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
+ | |||
+ | Вот теперь | ||
+ | |||
+ | В вашей модели щита, в нашем случае '' | ||
+ | <code javascript> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Вы также должны изменить свою модель блокировки для вашего щита, для нас '' | ||
+ | |||
+ | <code javascript> | ||
+ | { | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Для следующего шага добавьте '' | ||
+ | Затем вам нужно будет создать версию '' | ||
+ | |||
+ | Затем переместите обе эти текстуры в '' | ||
+ | |||
+ | И последнее, | ||
+ | <code javascript> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Теперь ваш щит готов и имеет поддержку баннера! | ||
- | ===== Adding banner support to your shield | + | ===== Добавление поддержки баннеров на ваш щит |
Вот тут-то и вступают в дело миксины. | Вот тут-то и вступают в дело миксины. | ||
- | Сначала измените fabric_shield_lib в **gradle.properties** | + | Сначала измените fabric_shield_lib в **gradle.properties** |
\\ | \\ | ||
<code java> | <code java> | ||
Line 98: | Line 332: | ||
<code java> | <code java> | ||
- | public static final Item NETHERITE_SHIELD = new FabricBannerShieldItem(new FabricItemSettings().maxDamage(2500).group(ItemGroup.COMBAT), | + | public static final Item NETHERITE_SHIELD = new FabricBannerShieldItem(new FabricItemSettings().maxDamage(2500).group(ItemGroup.COMBAT), |
</ | </ | ||
Line 248: | Line 482: | ||
Теперь ваш щит готов и имеет поддержку баннера! | Теперь ваш щит готов и имеет поддержку баннера! | ||
- | ===== Adding banner support to your shield | + | ===== Добавление поддержки баннеров на ваш щит |
Вот тут-то и вступают в дело миксины. | Вот тут-то и вступают в дело миксины. |
ru/tutorial/shield.txt · Last modified: 2022/03/26 20:15 by 127.0.0.1