feat: barrier block

todo: deprecate *.col file usage
This commit is contained in:
Fireblade 2026-04-29 16:35:14 -04:00
parent feb465ccbb
commit 950de854a1
22 changed files with 325 additions and 12 deletions

View file

@ -0,0 +1,80 @@
#include "stdafx.h"
#include "BarrierParticle.h"
#include "Minecraft.h"
#include "Tesselator.h"
#include "../Minecraft.World/Item.h"
#include "../Minecraft.World/Icon.h"
#include "../Minecraft.World/net.minecraft.world.level.tile.h"
#include "../Minecraft.World/Facing.h"
#include "../Minecraft.World/Level.h"
#include "../Minecraft.World/JavaMath.h"
void BarrierParticle::init(Level* level, double x, double y, double z, float scale)
{
xd = yd = zd = 0;
rCol = gCol = bCol = 1.0f;
alpha = 1.0f;
// fixed size
size = 0.5f * scale;
oSize = size;
lifetime = 80;
gravity = 0.0f;
}
BarrierParticle::BarrierParticle(Level* level,
double x, double y, double z,
double xa, double ya, double za)
: Particle(level, x, y, z, xa, ya, za)
{
init(level, x, y, z, 1.0f);
// set particle texture to barrier texture
this->setTex(Minecraft::GetInstance()->textures, Tile::barrier->getTexture(Facing::UP));
}
int BarrierParticle::getParticleTexture()
{
return ParticleEngine::TERRAIN_TEXTURE;
}
void BarrierParticle::render(Tesselator* t, float a, float xa, float ya, float za, float xa2, float za2)
{
rCol = gCol = bCol = 1.0f;
alpha = 1.0f;
float u0 = tex->getU0();
float u1 = tex->getU1();
float v0 = tex->getV0();
float v1 = tex->getV1();
float half = size;
float px = static_cast<float>(xo + (this->x - xo) * a - xOff);
float py = static_cast<float>(yo + (this->y - yo) * a - yOff);
float pz = static_cast<float>(zo + (this->z - zo) * a - zOff);
float br = SharedConstants::TEXTURE_LIGHTING ? 1.0f : getBrightness(a);
t->color(br * rCol, br * gCol, br * bCol, alpha);
t->tex2(getLightColor(a));
t->vertexUV((double)(px - xa * half - xa2 * half), (double)(py - ya * half), (double)(pz - za * half - za2 * half), (double)u1, (double)v1);
t->vertexUV((double)(px - xa * half + xa2 * half), (double)(py + ya * half), (double)(pz - za * half + za2 * half), (double)u1, (double)v0);
t->vertexUV((double)(px + xa * half + xa2 * half), (double)(py + ya * half), (double)(pz + za * half + za2 * half), (double)u0, (double)v0);
t->vertexUV((double)(px + xa * half - xa2 * half), (double)(py - ya * half), (double)(pz + za * half - za2 * half), (double)u0, (double)v1);
}
void BarrierParticle::tick()
{
xo = x;
yo = y;
zo = z;
if (++age >= lifetime)
remove();
xd = yd = zd = 0;
}

View file

@ -0,0 +1,23 @@
#pragma once
#include "Particle.h"
class BarrierParticle : public Particle
{
public:
virtual eINSTANCEOF GetType() { return eType_BARRIERPARTICLE; }
private:
void init(Level* level, double x, double y, double z, float scale);
public:
float oSize;
BarrierParticle(Level* level,
double x, double y, double z,
double xa, double ya, double za);
virtual int getParticleTexture();
virtual void render(Tesselator* t, float a, float xa, float ya, float za, float xa2, float za2);
virtual void tick();
};

View file

@ -0,0 +1,44 @@
<?xml version='1.0' encoding='utf-8'?>
<root>
<colour name="HTMLColor_8" value="555555" />
<colour name="HTMLColor_0" value="000000" />
<colour name="HTMLColor_1" value="0000aa" />
<colour name="HTMLColor_2" value="109e10" />
<colour name="HTMLColor_3" value="109e9e" />
<colour name="HTMLColor_4" value="aa0000" />
<colour name="HTMLColor_5" value="de5bd9" />
<colour name="HTMLColor_6" value="ffaa00" />
<colour name="HTMLColor_7" value="aaaaaa" />
<colour name="HTMLColor_9" value="7878ff" />
<colour name="HTMLColor_a" value="55ff55" />
<colour name="HTMLColor_b" value="55ffff" />
<colour name="HTMLColor_c" value="ff5555" />
<colour name="HTMLColor_d" value="ff55ff" />
<colour name="HTMLColor_e" value="ffff55" />
<colour name="HTMLColor_f" value="ffffff" />
<colour name="HTMLColor_dark_0" value="000000" />
<colour name="HTMLColor_dark_1" value="00002a" />
<colour name="HTMLColor_dark_2" value="002a00" />
<colour name="HTMLColor_dark_3" value="002a2a" />
<colour name="HTMLColor_dark_4" value="2a0000" />
<colour name="HTMLColor_dark_5" value="2a002a" />
<colour name="HTMLColor_dark_6" value="2a2a00" />
<colour name="HTMLColor_dark_7" value="2a2a2a" />
<colour name="HTMLColor_dark_8" value="151515" />
<colour name="HTMLColor_dark_9" value="15153f" />
<colour name="HTMLColor_dark_a" value="153f15" />
<colour name="HTMLColor_dark_b" value="153f3f" />
<colour name="HTMLColor_dark_c" value="3f1515" />
<colour name="Color_EnchantTextFocus" value="ffff80" />
<colour name="HTMLColor_dark_d" value="3f153f" />
<colour name="HTMLColor_dark_e" value="3f3f15" />
<colour name="HTMLColor_dark_f" value="3f3f3f" />
<colour name="HTMLColor_T1" value="c81e1e" />
<colour name="HTMLColor_T2" value="1c60d6" />
<colour name="HTMLColor_T3" value="2a9524" />
<colour name="HTMLColor_Black" value="323232" />
<colour name="HTMLColor_White" value="ebebeb" />
<colour name="Color_EnchantText" value="685e4a" />
<colour name="Color_EnchantTextDisabled" value="342f25" />
<colour name="Color_RenamedItemTitle" value="ffb82e" />
</root>

View file

@ -241,7 +241,7 @@ void HumanoidMobRenderer::additionalRendering(shared_ptr<LivingEntity> mob, floa
humanoidModel->arm0->translateTo(1 / 16.0f);
glTranslatef(-1 / 16.0f, 7 / 16.0f, 1 / 16.0f);
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape()))
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape()) && item->id != Tile::barrier_Id)
{
float s = 8 / 16.0f;
glTranslatef(-0 / 16.0f, 3 / 16.0f, -5 / 16.0f);

View file

@ -251,7 +251,7 @@ void ItemInHandRenderer::renderItem(shared_ptr<LivingEntity> mob, shared_ptr<Ite
}*/
Tile *tile = Tile::tiles[item->id];
if (item->getIconType() == Icon::TYPE_TERRAIN && tile != nullptr && TileRenderer::canRender(tile->getRenderShape()))
if ((item->getIconType() == Icon::TYPE_TERRAIN && tile != nullptr && TileRenderer::canRender(tile->getRenderShape())) && item->id != AirTile::barrier_Id)
{
MemSect(31);
minecraft->textures->bindTexture(minecraft->textures->getTextureLocation(Icon::TYPE_TERRAIN));
@ -302,7 +302,6 @@ void ItemInHandRenderer::renderItem(shared_ptr<LivingEntity> mob, shared_ptr<Ite
float xo = 0.0f;
float yo = 0.3f;
// Re position height of held item if skin is small
if (mob->getAnimOverrideBitmask() & (1 << HumanoidModel::eAnim_SmallModel))

View file

@ -82,7 +82,7 @@ void ItemRenderer::render(shared_ptr<Entity> _itemEntity, double x, double y, do
Tile *tile = Tile::tiles[item->id];
if (item->getIconType() == Icon::TYPE_TERRAIN && tile != nullptr && TileRenderer::canRender(tile->getRenderShape()))
if ((item->getIconType() == Icon::TYPE_TERRAIN && tile != nullptr && TileRenderer::canRender(tile->getRenderShape())) && item->id != Tile::barrier_Id)
{
glRotatef(spin, 0, 1, 0);
@ -355,7 +355,7 @@ void ItemRenderer::renderGuiItem(Font *font, Textures *textures, shared_ptr<Item
int itemAuxValue = item->getAuxValue();
Icon *itemIcon = item->getIcon();
if (item->getIconType() == Icon::TYPE_TERRAIN && TileRenderer::canRender(Tile::tiles[itemId]->getRenderShape()))
if ((item->getIconType() == Icon::TYPE_TERRAIN && TileRenderer::canRender(Tile::tiles[itemId]->getRenderShape())) && itemId != Tile::barrier_Id)
{
PIXBeginNamedEvent(0,"3D gui item render %d\n",itemId);
MemSect(31);

View file

@ -11,6 +11,7 @@
#include "MobSkinTextureProcessor.h"
#include "MobSkinMemTextureProcessor.h"
#include "GameRenderer.h"
#include "BarrierParticle.h"
#include "BubbleParticle.h"
#include "SmokeParticle.h"
#include "NoteParticle.h"
@ -42,6 +43,7 @@
#include "Lighting.h"
#include "Options.h"
#include "MultiPlayerChunkCache.h"
#include "../Minecraft.World/BlockPos.h"
#include "../Minecraft.World/ParticleTypes.h"
#include "../Minecraft.World/IntCache.h"
#include "../Minecraft.World/IntBuffer.h"
@ -63,6 +65,7 @@
#include "FrustumCuller.h"
#include "../Minecraft.World/BasicTypeContainers.h"
#include "Common/UI/UIScene_SettingsGraphicsMenu.h"
#include <unordered_set>
//#define DISABLE_SPU_CODE
@ -1054,6 +1057,15 @@ void LevelRenderer::tick()
}
}
}
if (mc && mc->player)
{
doBarrierParticles(
mc->player->x,
mc->player->y,
mc->player->z
);
}
}
void LevelRenderer::renderSky(float alpha)
@ -3060,6 +3072,9 @@ shared_ptr<Particle> LevelRenderer::addParticleInternal(ePARTICLE_TYPE eParticle
case eParticleType_dragonbreath:
particle = std::make_shared<DragonBreathParticle>(lev, x, y, z, xa, ya, za);
break;
case eParticleType_barrier:
particle = std::make_shared<BarrierParticle>(lev, x, y, z, xa, ya, za);
break;
default:
if( ( eParticleType >= eParticleType_iconcrack_base ) && ( eParticleType <= eParticleType_iconcrack_last ) )
{
@ -3081,6 +3096,76 @@ shared_ptr<Particle> LevelRenderer::addParticleInternal(ePARTICLE_TYPE eParticle
return particle;
}
void LevelRenderer::doBarrierParticles(int posX, int posY, int posZ)
{
// get currently selected item
shared_ptr<ItemInstance> held = mc->player->getSelectedItem();
bool isCreative = false;
if (mc->gameMode != nullptr) {
isCreative = (mc->gameMode->getLocalPlayerMode() == GameType::CREATIVE);
} else {
int lp = mc->getLocalPlayerIdx();
if (lp >= 0 && lp < XUSER_MAX_COUNT && mc->localgameModes[lp] != nullptr)
isCreative = (mc->localgameModes[lp]->getLocalPlayerMode() == GameType::CREATIVE);
}
bool holdingBarrier = isCreative && held != nullptr && held->id == Tile::barrier_Id;
if (!holdingBarrier)
return;
Random random;
BlockPos pos;
// track spawned particle position(s)
std::unordered_set<int> spawnedPositions;
for (int i = 0; i < 667; i++)
{
spawnBarrierParticles(posX, posY, posZ, 16, random, holdingBarrier, pos, spawnedPositions);
spawnBarrierParticles(posX, posY, posZ, 32, random, holdingBarrier, pos, spawnedPositions);
}
}
void LevelRenderer::spawnBarrierParticles(
int x, int y, int z,
int radius,
Random& random,
bool holdingBarrier,
BlockPos& pos,
std::unordered_set<int> &spawnedPositions)
{
if (!holdingBarrier)
return;
int bx = x + random.nextInt(radius * 2) - radius;
int by = y + random.nextInt(radius * 2) - radius;
int bz = z + random.nextInt(radius * 2) - radius;
pos.set(bx, by, bz);
int tileId = mc->level->getTile(pos.getX(), pos.getY(), pos.getZ());
// spawn particles
if (tileId == Tile::barrier_Id)
{
int key = pos.hashCode();
if (spawnedPositions.find(key) == spawnedPositions.end()) {
spawnedPositions.insert(key);
mc->particleEngine->add(
std::make_shared<BarrierParticle>(
mc->level,
bx + 0.5,
by + 0.5,
bz + 0.5,
0, 0, 0
)
);
}
}
}
void LevelRenderer::entityAdded(shared_ptr<Entity> entity)
{
if(entity->instanceof(eTYPE_PLAYER))

View file

@ -6,6 +6,7 @@
#include "../Minecraft.World/Level.h"
#include "ResourceLocation.h"
#include <xmcore.h>
#include <unordered_set>
#ifdef __PS3__
#include "C4JSpursJob.h"
#endif
@ -45,6 +46,8 @@ private:
static ResourceLocation END_SKY_LOCATION;
public:
void doBarrierParticles(int posX, int posY, int posZ);
static const int CHUNK_XZSIZE = 16;
static const int CHUNK_RENDER_LAYERS = 3;
#ifdef _LARGE_WORLDS
@ -67,6 +70,13 @@ public:
public:
LevelRenderer(Minecraft *mc, Textures *textures);
private:
void spawnBarrierParticles(
int x, int y, int z,
int radius,
Random& random,
bool holdingBarrier,
BlockPos& pos,
std::unordered_set<int> &spawnedPositions);
void renderStars();
void createCloudMesh(); // 4J added
public:

View file

@ -605,7 +605,7 @@ void PlayerRenderer::additionalRendering(shared_ptr<LivingEntity> _mob, float a)
anim = item->getUseAnimation();
}
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape()))
if (item->id < 256 && TileRenderer::canRender(Tile::tiles[item->id]->getRenderShape()) && item->id != Tile::barrier_Id)
{
float s = 8 / 16.0f;
glTranslatef(-0 / 16.0f, 3 / 16.0f, -5 / 16.0f);

View file

@ -1049,6 +1049,7 @@ void PreStitchedTextureMap::loadUVs()
ADD_ICON(21, 13, L"prismarine_dark");
ADD_ICON(20, 13, L"prismarine_bricks");
ADD_ICON(23, 11, L"barrier");
ADD_ICON(23, 12, L"packed_ice");
ADD_ICON(23, 14, L"inverted_daylight_detector");
ADD_ICON(23, 15, L"iron_trapdoor");

View file

@ -263,6 +263,11 @@ bool TileRenderer::tesselateInWorld( Tile* tt, int x, int y, int z, int forceDat
shared_ptr< TileEntity > forceEntity ) // 4J added forceData, forceEntity param
{
Tesselator* t = Tesselator::getInstance();
// skip in-game rendering of barrier block
if (tt != nullptr && tt->id == Tile::barrier_Id)
{
return false;
}
int shape = tt->getRenderShape();
tt->updateShape( level, x, y, z, forceData, forceEntity );
// AP - now that the culling is done earlier we don't need to call setShape until later on (only for SHAPE_BLOCK)

View file

@ -1473,6 +1473,10 @@ Can also be used for low-level lighting.</value>
<value>Collected by getting a Skeleton to kill a Creeper. Can be played in a jukebox.</value>
</data>
<data name="IDS_DESC_BARRIER">
<value>An invisible, but solid block.</value>
</data>
<data name="IDS_DESC_WATER">
<value>Extinguishes fire and helps crops grow. Can be collected in a bucket.</value>
</data>
@ -3001,6 +3005,10 @@ Can also be used for low-level lighting.</value>
<value>Bedrock</value>
</data>
<data name="IDS_TILE_BARRIER">
<value>Barrier</value>
</data>
<data name="IDS_TILE_WATER">
<value>Water</value>
</data>

View file

@ -678,6 +678,8 @@ set(_MINECRAFT_CLIENT_COMMON_NET_MINECRAFT_CLIENT_MULTIPLAYER
source_group("net/minecraft/client/multiplayer" FILES ${_MINECRAFT_CLIENT_COMMON_NET_MINECRAFT_CLIENT_MULTIPLAYER})
set(_MINECRAFT_CLIENT_COMMON_NET_MINECRAFT_CLIENT_PARTICLE
"${CMAKE_CURRENT_SOURCE_DIR}/BarrierParticle.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BarrierParticle.h"
"${CMAKE_CURRENT_SOURCE_DIR}/BreakingItemParticle.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BreakingItemParticle.h"
"${CMAKE_CURRENT_SOURCE_DIR}/BubbleParticle.cpp"

View file

@ -0,0 +1,31 @@
#include "stdafx.h"
#include "BarrierTile.h"
BarrierTile::BarrierTile(int id, Material *material, bool allowSame) : HalfTransparentTile(id, L"barrier", material, allowSame)
{
}
int BarrierTile::getResourceCount(Random *random)
{
return 0;
}
int BarrierTile::getRenderLayer()
{
return 0;
}
bool BarrierTile::isSolidRender()
{
return false;
}
bool BarrierTile::isCubeShaped()
{
return false;
}
bool BarrierTile::isSilkTouchable()
{
return false;
}

View file

@ -0,0 +1,17 @@
#pragma once
#include "HalfTransparentTile.h"
class Random;
class BarrierTile : public HalfTransparentTile
{
public:
using HalfTransparentTile::isSolidRender;
BarrierTile(int id, Material *material, bool allowSame);
virtual int getResourceCount(Random *random);
virtual int getRenderLayer();
virtual bool isSolidRender();
virtual bool isCubeShaped();
virtual bool isSilkTouchable();
};

View file

@ -265,6 +265,7 @@ enum eINSTANCEOF
eType_NETHERPORTALPARTICLE,
eType_REDDUSTPARTICLE,
eType_SMOKEPARTICLE,
eType_BARRIERPARTICLE,
eType_SNOWSHOVELPARTICLE,
eType_SPLASHPARTICLE,
eType_TAKEANIMATIONPARTICLE,

View file

@ -37,6 +37,7 @@ enum ePARTICLE_TYPE
eParticleType_enchantmenttable,
eParticleType_dragonbreath,
eParticleType_ender, // 4J Added - These are things that used the "portal" particle but are actually end related entities
eParticleType_barrier,
eParticleType_angryVillager,
eParticleType_happyVillager,
eParticleType_fireworksspark,

View file

@ -265,6 +265,7 @@ Tile* Tile::prismarine = nullptr;
Tile* Tile::tree2Trunk = nullptr;
Tile* Tile::packedIce = nullptr;
Tile* Tile::barrier = nullptr;
TallGrass2* Tile::tallgrass2 = nullptr;
DWORD Tile::tlsIdxShape = TlsAlloc();
@ -517,6 +518,7 @@ void Tile::staticCtor()
Tile::tree2Trunk = (new TreeTile2(162))->setDestroyTime(2.0f)->setSoundType(Tile::SOUND_WOOD)->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->sendTileData()->setUseDescriptionId(IDS_DESC_LOG);
Tile::woodStairsAcacia = (new StairTile(163, Tile::wood, TreeTile::ACACIA_TRUNK))->setBaseItemTypeAndMaterial(Item::eBaseItemType_stairs, Item::eMaterial_acaciawood)->setIconName(L"stairsWoodAcacia")->setDescriptionId(IDS_TILE_STAIRS_ACACIAWOOD)->sendTileData()->setUseDescriptionId(IDS_DESC_STAIRS);
Tile::woodStairsDark = (new StairTile(164, Tile::wood, TreeTile::DARK_TRUNK))->setBaseItemTypeAndMaterial(Item::eBaseItemType_stairs, Item::eMaterial_darkwood)->setIconName(L"stairsWoodDark")->setDescriptionId(IDS_TILE_STAIRS_DARKWOOD)->sendTileData()->setUseDescriptionId(IDS_DESC_STAIRS);
Tile::barrier = (new BarrierTile(166, Material::stone, false)) ->setIndestructible()->setExplodeable(6000000)->setSoundType(Tile::SOUND_STONE)->setIconName(L"barrier")->setDescriptionId(IDS_TILE_BARRIER)->setNotCollectStatistics()->setUseDescriptionId(IDS_DESC_BARRIER);
Tile::iron_trapdoor = (new TrapDoorTile(167, Material::metal))->setBaseItemTypeAndMaterial(Item::eBaseItemType_door, Item::eMaterial_trap)->setDestroyTime(5.0f)->setSoundType(Tile::SOUND_METAL)->setIconName(L"iron_trapdoor")->setDescriptionId(IDS_TILE_IRON_TRAPDOOR)->setNotCollectStatistics()->sendTileData()->setUseDescriptionId(IDS_DESC_TRAPDOOR);
Tile::hayBlock = (new HayBlockTile(170)) ->setBaseItemTypeAndMaterial(Item::eBaseItemType_block, Item::eMaterial_wheat)->setDestroyTime(0.5f)->setSoundType(SOUND_GRASS)->setIconName(L"hay_block")->setDescriptionId(IDS_TILE_HAY)->setUseDescriptionId(IDS_DESC_HAY);
@ -592,9 +594,6 @@ void Tile::staticCtor()
Item::items[tree2Trunk_Id] = (new MultiTextureTileItem(Tile::tree2Trunk_Id - 256, tree2Trunk, (int*)TreeTile2::TREE_NAMES, TreeTile2::TREE_NAMES_LENGTH))->setIconName(L"log")->setDescriptionId(IDS_TILE_LOG)->setUseDescriptionId(IDS_DESC_LOG);
Item::items[sponge_Id] = (new MultiTextureTileItem(Tile::sponge_Id - 256, sponge, (int*)Sponge::SPONGE_NAMES, Sponge::SPONGE_NAMES_LENGTH))->setIconName(L"sponge")->setDescriptionId(IDS_TILE_SPONGE)->setUseDescriptionId(IDS_DESC_SPONGE);
int tallgrass2IdsData[TallGrass2::VARIANT_COUNT] = {
IDS_TILE_SUNFLOWER, // 0 - Sunflower, not implemented yet
IDS_TILE_LILAC, // 1 - Lilac

View file

@ -11,6 +11,7 @@ class GrassTile;
class LeafTile;
class LeafTile2;
class TallGrass;
class BarrierTile;
class DeadBushTile;
class FireTile;
class PortalTile;
@ -373,7 +374,7 @@ public:
static const int stairs_acaciawood_Id = 163;
static const int stairs_darkwood_Id = 164;
//165 slimeblock
//166 barrier
static const int barrier_Id = 166;
static const int iron_trapdoor_Id = 167;
static const int prismarine_Id = 168;
static const int seaLantern_Id = 169;
@ -606,6 +607,7 @@ public:
static Tile *clayHardened;
static Tile *coalBlock;
static Tile *barrier;
static Tile *iron_trapdoor;
static Tile* door_spruce;
@ -613,7 +615,7 @@ public:
static Tile* door_jungle;
static Tile* door_acacia;
static Tile* door_dark;
static Tile* spruceFence;
static Tile* birchFence;
static Tile* jungleFence;

View file

@ -1773,6 +1773,10 @@ set(_MINECRAFT_WORLD_COMMON_NET_MINECRAFT_WORLD_LEVEL_TILE
"${CMAKE_CURRENT_SOURCE_DIR}/AirTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/AnvilTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/AnvilTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/../Minecraft.Client/BarrierParticle.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/../Minecraft.Client/BarrierParticle.h"
"${CMAKE_CURRENT_SOURCE_DIR}/BarrierTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BarrierTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/BaseEntityTile.cpp"
"${CMAKE_CURRENT_SOURCE_DIR}/BaseEntityTile.h"
"${CMAKE_CURRENT_SOURCE_DIR}/BasePressurePlateTile.cpp"

View file

@ -3,6 +3,7 @@
#include "Tile.h"
#include "AirTile.h"
#include "AnvilTile.h"
#include "BarrierTile.h"
#include "BaseEntityTile.h"
#include "BasePressurePlateTile.h"
#include "BaseRailTile.h"

View file

@ -24,7 +24,7 @@ for arg in "$@"; do
args+=("$(map_to_windows_path "$arg")")
done
"@LCE_WINE_PROGRAM@" "@LCE_FXC_EXE@" "${args[@]}"
WINEDEBUG=-all "@LCE_WINE_PROGRAM@" "@LCE_FXC_EXE@" "${args[@]}"
status=$?
if [[ "$status" -eq 0 && -n "$out_header" && -f "$out_header" ]]; then