- 3
- 0
Собственно, вопрос.
Есть модифицированый сервер и клиент на базе Beta 1.7.3. Цель - расширить число допустимых блоков, что и было успешно сделано, сдвинуто до 1024.
Таким образом, блоки смогли иметь ID 0-1023, а предметы были сдвинуты выше, 1024+
Например, из Block.java:
ItemBlock:
Item
StatList
ItemRender
На новой карте всё ОК - отлично играем, блоки с ID выше 256 крафтятся и сохраняются.
Но при входе на старую карту клиент и сервер падают из-за несовпадения ID предметов (было 256, стало 1280).
Вопрос: имеются ли инструменты для конвертации юзерского инвертаря/сундуков, или как можно сохранить ID предметов, но при этом разрешить использовать ID для блока свыше 256, не задевая предметы?
Есть модифицированый сервер и клиент на базе Beta 1.7.3. Цель - расширить число допустимых блоков, что и было успешно сделано, сдвинуто до 1024.
Таким образом, блоки смогли иметь ID 0-1023, а предметы были сдвинуты выше, 1024+
Например, из Block.java:
Java:
Item.itemsList[cloth.blockID] = (new ItemCloth(cloth.blockID - 1024)).setItemName("cloth");
Item.itemsList[planks.blockID] = (new ItemPlanks(planks.blockID - 1024)).setItemName("planks");
Item.itemsList[wood.blockID] = (new ItemLog(wood.blockID - 1024)).setItemName("log");
Item.itemsList[stairSingle.blockID] = (new ItemSlab(stairSingle.blockID - 1024)).setItemName("stoneSlab");
Item.itemsList[sapling.blockID] = (new ItemSapling(sapling.blockID - 1024)).setItemName("sapling");
Item.itemsList[leaves.blockID] = (new ItemLeaves(leaves.blockID - 1024)).setItemName("leaves");
Item.itemsList[pistonBase.blockID] = new ItemPiston(pistonBase.blockID - 1024);
Item.itemsList[pistonStickyBase.blockID] = new ItemPiston(pistonStickyBase.blockID - 1024);
for(int i = 0; i < 1024; i++)
{
if(blocksList[i] != null && Item.itemsList[i] == null)
{
Item.itemsList[i] = new ItemBlock(i - 1024);
blocksList[i].initializeBlock();
}
}
ItemBlock:
Java:
public ItemBlock(int i)
{
super(i);
blockID = i + 1024;
setIconIndex(Block.blocksList[i + 1024].getBlockTextureFromSide(2));
}
Item
Java:
protected Item(int i)
{
maxStackSize = 64;
maxDamage = 0;
bFull3D = false;
hasSubtypes = false;
containerItem = null;
shiftedIndex = 1024 + i;
if(itemsList[1024 + i] != null)
{
System.out.println((new StringBuilder()).append("CONFLICT @ ").append(i).toString());
}
itemsList[1024 + i] = this;
}
StatList
Java:
private static StatBase[] func_25153_a(String s, int i)
{
StatBase astatbase[] = new StatBase[1024];
for(int j = 0; j < 1024; j++)
{
if(Block.blocksList[j] != null && Block.blocksList[j].getEnableStats())
{
String s1 = StatCollector.translateToLocalFormatted(s, new Object[] {
Block.blocksList[j].translateBlockName()
});
astatbase[j] = (new StatCrafting(i + j, s1, j)).registerStat();
field_25185_d.add((StatCrafting)astatbase[j]);
}
}
ItemRender
Java:
public void renderItem(EntityLiving entityliving, ItemStack itemstack)
{
GL11.glPushMatrix();
if(itemstack.itemID < 1024 && RenderBlocks.renderItemIn3d(Block.blocksList[itemstack.itemID].getRenderType()))
{
GL11.glBindTexture(3553 /[I]GL_TEXTURE_2D[/I]/, mc.renderEngine.getTexture("/terrain.png"));
renderBlocksInstance.renderBlockOnInventory(Block.blocksList[itemstack.itemID], itemstack.getItemDamage(), entityliving.getEntityBrightness(1.0F));
} else
{
if(itemstack.itemID < 1024)
{
GL11.glBindTexture(3553 /[I]GL_TEXTURE_2D[/I]/, mc.renderEngine.getTexture("/terrain.png"));
} else
{
GL11.glBindTexture(3553 /[I]GL_TEXTURE_2D[/I]/, mc.renderEngine.getTexture("/gui/items.png"));
}
На новой карте всё ОК - отлично играем, блоки с ID выше 256 крафтятся и сохраняются.
Но при входе на старую карту клиент и сервер падают из-за несовпадения ID предметов (было 256, стало 1280).
Вопрос: имеются ли инструменты для конвертации юзерского инвертаря/сундуков, или как можно сохранить ID предметов, но при этом разрешить использовать ID для блока свыше 256, не задевая предметы?
Последнее редактирование: