Top.Mail.Ru
Ответы
Аватар пользователя
Изменено

Майнкрафт. Какая сущность кроме лодки имеет коллизию и не привязана к сетке или как сделать лодку невидимой

Мне нужна сущность по которой можно ходить, она не должна быть привязана к сетке 1 на 1 блок и можно было изменять видимость этой сущности, я проверял с лодкой но ее нельзя сделать невидимой

По дате
По рейтингу
Аватар пользователя
Новичок

Любую сущность можно сделать невидимой при помощи редактирования ванильных шейдеров в наборах ресурсов. Так, для твоих задач оптимально использовать шалкера, так как он имеет довольно небольшие размеры (всего 1×1×1 вместо 0.5×1.5×1.5 у лодки) и может быть отвязан от сетки блоков, если призвать его командой, сидящим на маркере или стенде (телепортация маркера/стенда тянет за собой пассажира-шалкера).

Однако даже если наложить на него невидимость, голова всё равно будет видна, для этого нам и нужен набор ресурсов с изменённым ванильным шейдером. Сделать это можно следующим образом:

1. Удаляем текстуру шалкеру в файлах его текстур (их там несколько, на каждый цвет, удаляй тому, который будешь использовать). Сами текстуры расположены здесь:

assets/minecraft/textures/entity/shulker

После чего получим примерно следующее:

Голова всё ещё видна (хоть и без текстуры) из-за особенностей рендеринга игрой некоторых сущностей.

2. Чтобы это исправить, создаём в ресурспаке файл с именем

rendertype_entity_solid.fsh

... и помещаем его по адресу

assets/minecraft/shaders/core



3. открываем его в любом текстовом редакторе и вставляем туда следующее:

12345678910111213141516171819202122232425262728293031323334353637383940414243
 #version 150 
 
#moj_import <fog.glsl> 
 
uniform sampler2D Sampler0; 
 
uniform vec4 ColorModulator; 
 
uniform float FogStart; 
 
uniform float FogEnd; 
 
uniform vec4 FogColor; 
 
in float vertexDistance; 
 
in vec4 vertexColor; 
 
in vec4 lightMapColor; 
 
in vec4 overlayColor; 
 
in vec2 texCoord0; 
 
in vec4 normal; 
 
out vec4 fragColor; 
 
void main() { 
 
    vec4 color = texture(Sampler0, texCoord0) * vertexColor * ColorModulator; 
 
    if (color.a < 0.1) 
 
        discard; 
 
    color.rgb = mix(overlayColor.rgb, color.rgb, overlayColor.a); 
 
    color *= lightMapColor; 
 
    fragColor = linear_fog(color, vertexDistance, FogStart, FogEnd, FogColor); 
 
} 

Это заставит игру поддерживать прозрачность даже у текстур тех мобов, которые её не поддерживают, за счёт небольшой нагрузки (чем больше пространства на экране будет занимать такая текстура, тем выше будет нагрузка). Об этом способе я узнал от dartcat25 , оставляю на него ссылку.

4. Перезагружаем ресурсы при помощи F3+T и наслаждаемся результатом.

Примечание: при помощи возможностей оптифайна или Entity Texture Features удалять текстуры сущностям можно и более простым способом, однако такие наборы ресурсов не будут совместимы с немотивированной игрой, что плохо. Но при желании можно покопаться в документации этих модов и сделать через них.

Аватар пользователя
Ученик

Если лень делать байду сверху, то лодка нвидимой делается через команду /effect give @e[type=boat] invisibility 9999 1